c++继承关系的疑问,谢谢~~~

来源:百度知道 编辑:UC知道 时间:2024/06/23 03:51:14
class vehicle{
public:
vehicle();
~vehicle();
}
class land_vehicle:public vehicle{
public:land_vehicle();
~land_vehicle();
};
class tank:public land_vehicle{
public:
tank();
~tank();
};
void main(){
vehicle*vp=new tank();
delete vp;
}
小弟不才,对这些类的继承有些疑问,特别是 vehicle*vp=new tank();书上说是先调用了tank的构造函数,而tank的构造函数调用land_vehicle的构造函数,再是land_vehicle的构造函数调用了vehicle的构造函数。这样的话不是构造了三个实体了吗???(调用构造函数是不是就是构造实体----object啊?????)。但是程序的目的只是创建一个实体啊~~
是不是我的思维有些不正确,请各位大虾指教,谢谢~ 记得说明白些,我一般只加分给正确的,能让我理解的answerer.
1,2楼去死

首先要读懂程序:
程序建立了三个类,vehicle类、land_vehicle类和tank类,vehicle类作为land_vehicle类的父类,land_vehicle类作为tank类的父类,且都是公有继承,这也说明了vehicle类也是tank类的父类。

子继父就是代代相传的意思,儿子继承父亲的所提供出来的属性,父亲的所提供出来的属性取决于继承的方式了。
主程序中vehicle*vp=new tank(),创建一个tank类的对象,调用tank类的构造函数,由于有继承关系,就要先继承父类的,所以一层层调用land_vehicle类和vehicle类的构造函数,构造函数的调用顺序为:vehicle类、land_vehicle类、tank类。如果不信,可借用4楼的例子进行验证,正如其类中所述,在类里添加输出语句更能增进理解。

构造实体要通过vehicle*vp=new tank()这样的语句来表明,这样的语句的条数就决定了构造实体的个数,构造实体的实现要通过类中的构造函数来完成,构造函数只是一个实体所具有属性的说明,构造函数的个数不能说明构造实体的个数。

根天书一样,不懂!我也去死吗?

飘渺世间天: 精彩~~!
我也来分析分析
构造函数的作用是对该类实例->对象进行变量的初始化。父类中的变量(当然此时的变量可以是普通变量,也可以是对象),在子类中全都继承过来,至少早期C++体系是这样的,对于能不能在子类中访问要看父类中的变量访问类型。但不管怎样,不管继承多少层,最终的子类应该是包含了所有父类以及父类的父类的所有变量。所以对于这么多变量来说,要初始化变量,当然得先调用父类中的构造函数,有多少次,有几层就构造多少次。

构造函数作用是初始化变量(当然你也可以一个变量都不初始,但系统默认每个类都有自己的构造函数),就象你要出门你父母会给你准备好一切行李。当然你还有你自己的私人物品你自己准备。
析构函数作用是销毁变量。就象你回家的时候,你先把自己的私人物品放回原地,然后你父母帮你把其他行李都放回原处,以备下次使用。
构造函数的调用并不是创建类的实例。就象父母为你准备行李并不表示你父母要出远门这个道理,他