2010-09-17 207 views
4

假设我有一个名为Car的类,另一个名为SuperCar的继承自Car的类。我如何确保在SuperCar的构造函数中调用Car的构造函数?我只是做:Car.Car(// args);?构造函数和继承?

由于

+0

它将被默认调用,或者你想调用为Car的特殊构造函数创建SuperCar? – DumbCoder 2010-09-17 11:37:35

+0

一个特定的。 (以及一个会类似的论点) – jmasterx 2010-09-17 11:38:23

回答

3

在超级构造添加: 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:通过调用SuperCarCar一个子类是混乱的方式,你应该避免这种情况。

3

例如:

SuperCar::SuperCar(Parameter p) : Car(p){ 
    //some voodoo... 
} 

如果我没有记错

编辑:该死的,KRISS也较快:)

+0

嗯,我不能对我的答案做+1,但我可以给你,他们是一样的无论如何:-) – kriss 2010-09-17 12:35:13

5

样品类没有成员瓦尔。

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*/} 
}; 
1

在派生类的构造函数,定义了基类的初始化与所需的参数:

SuperCar(/*params*/) : Car(/*differentParams*/) 
{ 
} 
0

为此,您可以使用初始化器列表。

SuperCard::SuperCar(args):Car(args){ //Supercar part} 
1

SuperCar构造也会像,

SuperCar(int sayForExample):car(sayForExample),m_SuperCarMember(sayForExample) 
{ 
// constructor definition 
} 

这将调用特定的构造car(int)初始化SuperCar的成员m_SuperCarMember ..

希望它可以帮助..