- Ball.h
#include <string> using namespace std; class Ball { public: Ball(); Ball(double, const char*); Ball(double, string&); // 實作於類別定義中的函式會自動inline double radius() { return _radius; } string& name() { return _name; } void radius(double radius) { _radius = radius; } void name(const char *name) { _name = name; } void name(string& name) { _name = name; } double volumn() { return (4 / 3 * 3.14159 * _radius * _radius * _radius); } private: double _radius; // 半徑 string _name; // 名稱 };
2. 在定義類別時,如果您只是需要使用到某個類別來宣告指標或是參考,但不涉及類別的生成或操作等訊息,則您可以作該類別的前置宣告(Forward declaration),而不用含入該類別的定義,例如:
- Test.h
class Ball; class Test { public: Test(); Test(Ball*); Ball* ball(); void ball(Ball*); private: Ball *_ball; // 名稱 };
3. 如果您的類別定義有單一參數的建構函式(或除了第一個參數之外,其它參數都有預設值的建構函式),則預設會有自動轉換的作用,例如:
class Ball {
public:
Ball(const char*);
...
};
public:
Ball(const char*);
...
};
則您可以使用以下的方式來建構物件並初始化:
Ball ball = "Green ball";
預設的轉換行為是由編譯器施行的,但有時是有危險的,如果您不希望編譯器自作主張,則您可以使用explicit修飾,告訴編譯器不要自作主張:
class Ball {
public:
explicit Ball(const char*);
...
};
4. 在建構函式的初始化設定語法中,您還可以使用成員初始化列表(Member initialization list),例如:
- SafeArray.cpp
#include "SafeArray.h" SafeArray::SafeArray(int len) : length(len) { _array = new int[length]; } ...略
要被初始化的成員跟在參數列之後,要被設定給成員的引數被放在括號中,如果有多個成員要初始化,則以逗號分隔。
沒有留言:
張貼留言