假设我有一个名为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