C++中的類與面向對象
c++與java類似,也有面向對象的概念,不過語法上個人認爲還是有許多差異的。
類的定義:
class Box
{
public:
double length; // 盒子的長度
double breadth; // 盒子的寬度
double height; // 盒子的高度
};
上面的例子我們可以看出來c++與java的差異,比如類定義的末尾要跟一個分號,還有就是成員變量需要聲明在像public這樣的訪問修飾符的後面,然後就是訪問修飾符後面要跟一個冒號等等。
疑問:
我在這裏有個小疑問,就是關於類的使用,在Java裏面當然是先new對象然後再調用類裏面的成員變量等等,但是c++裏面好像不需要new,直接聲明就能訪問到成員變量了:
#include <iostream>
using namespace std;
class Box
{
public:
double length; // 長度
double breadth; // 寬度
double height; // 高度
};
int main( )
{
Box Box1; // 聲明 Box1,類型爲 Box
Box Box2; // 聲明 Box2,類型爲 Box
double volume = 0.0; // 用於存儲體積
// box 1 詳述
Box1.height = 5.0;
Box1.length = 6.0;
Box1.breadth = 7.0;
// box 2 詳述
Box2.height = 10.0;
Box2.length = 12.0;
Box2.breadth = 13.0;
// box 1 的體積
volume = Box1.height * Box1.length * Box1.breadth;
cout << "Box1 的體積:" << volume <<endl;
// box 2 的體積
volume = Box2.height * Box2.length * Box2.breadth;
cout << "Box2 的體積:" << volume <<endl;
return 0;
}
上面的例子我們能看到c++裏面使用對象的時候好像不需要new,就能訪問到成員變量,但是我在Android源碼裏面看到過new的情況,這個等小弟再研究一波,先不糾結。
成員函數:
成員函數的定義有兩種形式,直接看實例:
class Box
{
public:
double length; // 長度
double breadth; // 寬度
double height; // 高度
double getVolume(void)
{
return length * breadth * height;
}
};
這是第一種,這種基本跟java語法就是一樣的了,不多說,來看第二種
#include <iostream>
using namespace std;
class Box
{
public:
double length; // 長度
double breadth; // 寬度
double height; // 高度
// 成員函數聲明
double getVolume(void);
};
// 成員函數定義
double Box::getVolume(void)
{
return length * breadth * height;
}
這種就能體現差異了,我們可以看到,在類裏面只是聲明瞭函數,而函數實現是在類的外部,還用到了一個符號 :: --作用域限定符,在類體外實現函數定義的時候,必須加上類名並且加上作用域限定符。android源碼裏面用的比較多的就是第二種,而且會把類的定義放在h文件中,而函數實現放到cpp文件中。類訪問修飾符:
c++中類的訪問修飾符有三種:public、private、protected,作用與java基本一樣,注意c++中如果成員變量前面未聲明訪問修飾符,則默認是private。