C ++ - 基类的构造函数使用参数的构造函数

时间:2012-03-13 21:45:45

标签: c++ inheritance

我有一个继承Vehicle类的Car类。 Car和Vehicle类都接受参数“wheels”。根据我对继承如何工作的理解,对象Car将分两个阶段构建:Vehicle首先通过调用其构造函数来构造,然后是Car,它也将调用它的构造函数。我的问题是,当Vehicle的构造函数使用其参数时,如何编写Car的构造函数?

class Vehicle {
public:
    Vehicle(int wheels);
};

class Car {
public:
    Car(int wheels): Vehicle(wheels);
};

5 个答案:

答案 0 :(得分:9)

您需要继承车辆:

标题文件:

class Car: public Vehicle {
public:
    Car(int wheels);
};

Cpp文件:

Car::Car(int wheels): Vehicle(wheels) {
}

答案 1 :(得分:4)

将轮子传递给Vehicle构造函数,然后处理Car构造函数中的其他参数。

class Car : public Vehicle {
public:
    Car(int otherParam, int wheels);
};

Car::Car(int otherParam, int wheels) : Vehicle(wheels) {
    //do something with other params here
}

当然,你可以有多个其他参数,它们不需要是整数;)

编辑:在我最初的例子中,我也忘了继承车辆,感谢perreal指出这一点。

答案 2 :(得分:0)

内联:

Car(int wheels) : Vehicle(wheels) { }

或外线:

class Car : public Vehicle {
  Car(int); 
  // ...  
};

Car::Car(int wheels) : Vehicle(wheels) { }

答案 3 :(得分:0)

首先,

      class Car:public Vehicle{...

我不确定你的意思是“我将如何编写myCars构造函数”

      Vehicle(int wheels):m_Wheels(wheels)
      {
           // or m_Wheels = wheels;
      }
      ...
      Car(int wheels):Vehicle(wheels)
      {
             if(m_Wheels != 4)
                  fprintf(stdout, "Uh Oh");
      }

在这种情况下,调用车辆构造函数,然后调用汽车构造函数。请注意,我可以在Car中使用m_Wheels,因为它已在Vehicle中初始化。

这会回答你的问题吗?

答案 4 :(得分:0)

您正在寻找的是:

Car::Car(int wheels)
:Vehicle(wheels) 
{
 // Do Car constructor specific stuff here.
}

:Vehicle(wheels)会将wheel参数向上传递给Vehicle构造函数,它将按照您描述的顺序构建。