有時候,基類建構函式是帶有引數,而子類建構函式是不帶引數的,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class Animal { public: Animal(int width, int height) { this->width = width; this->height = height; } private: int width, height; }; class Cat:public Animal { public: Cat() { cout << "init cat" << endl; } }; |
在建立Cat類物件時,編譯出錯:
C:\Documents and Settings\Administrator\桌面\abc\Text1.cpp(104) : error C2512: ‘Animal’ : no appropriate default constructor available
解決這個問題應該在Cat的建構函式中顯式呼叫基類的帶參建構函式。因為在基類中定義了帶參建構函式,編譯器不會提供預設建構函式。
(或者可以在基類中增加一個不帶引數的建構函式)這個問題將解決。
下面採用的是呼叫基類帶參建構函式的方式:
1 2 3 4 5 |
class Cat:public Animal { public: Cat():Animal(100,200) { cout << "init cat" << endl; } }; |
即在建構函式的後面增加一個冒號,後面是基類的建構函式。
這種方式同樣可以用來初始化類中的常量。
由於在類定義中不允許對成員進行初始化,常量也不允許。
如下所示:
1 2 3 4 5 6 7 8 |
class Cat:public Animal { public: Cat():Animal(100,200),Age(2),IsLikeFish(true) { cout << "init cat" << endl; } private: const int Age; const bool IsLikeFish; }; |