2012-03-13 154 views
3

我有一个Car类继承Vehicle类。 “汽车”和“车辆”类别都采用参数“轮子”。根据我对继承如何工作的理解,对象Car将分两个阶段构建:Vehicle首先通过调用它的构造函数构造,然后构造Car,然后调用它的构造函数。我的问题是,当车辆的构造函数使用参数时,如何编写我的Car的构造函数?C++ - 构造函数,其中使用的参数基类'构造函数

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

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

回答

7

你忘了从整车继承:

头文件

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

cpp文件:

Car::Car(int wheels): Vechile(wheels) { 
} 
+0

car.cpp应该是什么样子?它应该看起来像Car :: Car(int wheel){}? – user27279 2012-03-13 22:15:09

+0

是的,如果您想在标题中调用Vehicle构造函数。或者''Car :: Car(int wheel):Vehicle(wheel){}'在'cpp'中,而不是在头文件构造函数(声明)中提及Vehicle。 – perreal 2012-03-13 22:20:42

+0

所以在我的.h文件中,我应该有课Car {public:Car(int wheels);}; – user27279 2012-03-13 22:22:48

3

您将车轮传递给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 
} 

当然,你可以有多个其他PARAMS,他们并不需要是整数)

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

+0

嗯。傻我。 car.cpp应该是什么样子?它应该看起来像Car :: Car(int wheel){}? – user27279 2012-03-13 22:13:41

+0

我发布的代码的第二部分(以Car :: Car开头)将进入car.cpp – Moritz 2012-03-13 23:01:30

0

内联:

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

或者失行:

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

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

car.cpp应该是什么样子?它应该看起来像Car :: Car(int wheel){}? – user27279 2012-03-13 22:14:53

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中初始化。

这是回答您的问题吗?

0

什么你要找的是:

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

:Vehicle(wheels)将通过车轮参数了线到车辆的构造函数,它会在你所描述的顺序构建。

+0

Np。我认为你的“post code-fu”很好:) car.cpp应该是什么样子?它应该看起来像Car :: Car(int wheel){}? – user27279 2012-03-13 22:15:56

+0

这正是我在那里,Car构造函数的精确实现。 Vehicle的构造函数与Vehicle :: Vehicle(int wheels){/ * do stuff * /}'大致相同。 – 2012-03-13 22:33:29

相关问题