假設我有一個名爲Car的類,另一個名爲SuperCar的繼承自Car的類。我如何確保在SuperCar的構造函數中調用Car的構造函數?我只是做:Car.Car(// args);?構造函數和繼承?
由於
假設我有一個名爲Car的類,另一個名爲SuperCar的繼承自Car的類。我如何確保在SuperCar的構造函數中調用Car的構造函數?我只是做:Car.Car(// args);?構造函數和繼承?
由於
在超級構造添加: Car(... your arguments ...)
構造報頭和構造體之間。
爲例,代碼:
#include <iostream>
using namespace std;
class Car {
public:
Car() { }
// Oh, there is several constructors...
Car(int weight){
cout << "Car weight is " << weight << endl;
}
};
class SuperCar: public Car {
public:
// we call the right constructor for Car, detected by call arguments
// relying on usual function overloading mechanism
SuperCar(int weight, int height) : Car(weight) {
cout << "SuperCar height " << height << endl;
}
};
int main(){
SuperCar(1, 10);
}
PS:通過調用SuperCar
的Car
一個子類是混亂的方式,你應該避免這種情況。
例如:
SuperCar::SuperCar(Parameter p) : Car(p){
//some voodoo...
}
如果我沒有記錯
編輯:該死的,KRISS也較快:)
嗯,我不能對我的答案做+1,但我可以給你,他們是一樣的無論如何:-) – kriss 2010-09-17 12:35:13
樣品類沒有成員瓦爾。
class Car {
Car(); /*If you want default objects*/
Car(/*arg list*/); /* maybe multiple constructors with different, count and
type args */
};
class SuperCar {
SuperCar(/*args list*/) : Car(/*arg list*/){/*Constructor Body*/}
};
在派生類的構造函數,定義了基類的初始化與所需的參數:
SuperCar(/*params*/) : Car(/*differentParams*/)
{
}
爲此,您可以使用初始化器列表。
SuperCard::SuperCar(args):Car(args){ //Supercar part}
你SuperCar
構造也會像,
SuperCar(int sayForExample):car(sayForExample),m_SuperCarMember(sayForExample)
{
// constructor definition
}
這將調用特定的構造car(int)
和初始化的SuperCar
的成員m_SuperCarMember
..
希望它可以幫助..
它將被默認調用,或者你想調用爲Car的特殊構造函數創建SuperCar? – DumbCoder 2010-09-17 11:37:35
一個特定的。 (以及一個會類似的論點) – jmasterx 2010-09-17 11:38:23