[英]constructors inherited in c++
构造函数与其他类方法的不同之处在于它们创建新对象,而其他方法则由现有对象调用。 这是构造函数不被继承的原因之一。 继承意味着派生的对象可以使用基类方法,但是对于构造函数,该对象直到构造函数完成工作后才存在。
构造函数是否创建新对象,或者在调用对象时立即调用该构造函数?
据说构造函数和析构函数不是从基类继承到派生类,而是程序处于矛盾之下,我们正在创建派生类的对象,但它也输出基类的构造函数和析构函数?
class A{
public:
A(){
cout<< Const A called<<endl;
}
~A(){
cout<< Dest A called <<endl;
}
};
Class B : public A{
public:
B(){
cout<< Const B called <<endl;
}
~B(){
cout<< Dest B called <<endl;
}
};
int main(){
B obj;
return 0;
}
输出:
const A被称为
const B叫
目的地B叫
目的地A被称为
从某种意义上说,派生类D
不会从B
继承构造函数,因为不指定任何显式D
构造函数,我可以使用B(int)
来构造new D(1);
。
但是,我可以做的是在派生类构造函数的定义中使用基类构造函数,例如D::D(void) : B(1) {}
。
不太抽象的是,假设我有一个使用gender
参数的Person
构造函数,我可能希望创建一个:
class Son: Person{
public:
Son(void) : Person(male) {};
};
构造一个Son
,显然是一个Person
,但是当然不需要参数gender
。
析构函数在意义上的“继承”上的闭括号D::~D(){}
到呼叫~B()
是隐含的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.