构造函数和继承?

时间:2010-09-17 11:35:10

标签: c++

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

由于

6 个答案:

答案 0 :(得分: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 :(得分:3)

在SuperCar构造函数中,在构造函数头和构造函数体之间添加: 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的子类令人困惑,你应该避免这种情况。

答案 2 :(得分:3)

示例:

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

如果我没记错的话

编辑:该死的,kriss更快:)

答案 3 :(得分:1)

在派生类构造函数中,使用所需参数为基类定义初始值设定项:

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

答案 4 :(得分:1)

您的SuperCar构造函数就像,

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

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

希望有所帮助......

答案 5 :(得分:0)

您可以使用初始化列表执行此操作。

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