1,构造函数和析构函数不能被继承。构造函数和析构函数是用来处理对象的创建和析构的,它们只知道对在它们的特殊层次的对象做什么。所以,在整个层次中的所有的构造函数和析构函数都必须被调用而不能被继承。
2,子类的构造函数会显示的调用父类的构造函数或隐式的调用父类的默认的构造函数进行父类部分的初始化。
3,析构函数也一样。它们都是每个类都有的东西,如果能被继承,那就没有办法初始化了。
这个和直接调用base::base(1)没有区别,不是实际意义上的继承。为什么这么说,是因为构造函数并没有this这个隐藏参数。构造函数中调用的this,是在构造的过程中、系统分配完成之后才有的。所以构造函数本身并没有继承到下面那个类里面,derive::base(1)返回的实际上还是一个base类。
派生类的构造函数会调用基类的构造函数,不过这个也不应该视为是继承,实际上只是单纯的调用而已。derive() : base() {}这样,本质上看是调用了另一个函数,而不是继承。另外基类的构造函数中也不可以调用任何虚函数,因为派生类还没有初始化,包括虚函数表在内。
不同的是,析构函数的确是可以继承的,甚至可以定义为虚函数,这样用基类指针进行delete的时候也可以正确地调用到派生类的析构函数。派生类的析构函数在执行结束后也会自动调用基类的析构函数。不过析构函数只能通过delete操作符来调用,所以继承关系不算很明显。
构造函数自动被继承的
因为要想把一个“儿子”实例化,要现有实例化的“老爸”,所以在对“儿子”使用的时候,要先构造他“老爸”。
我有点不明白的是,这个程序在VC++6.0里面不能编译通过,在DEV-C++里面就可以,这是问什么啊??
不能继承,要在子类的构造函数中标明调用