构造函数与其他类方法的不同之处在于它们创建新对象,而其他方法则由现有对象调用。这是构造函数不被继承的一个原因。继承意味着派生对象可以使用基类方法,但是在构造函数的情况下,该对象在构造函数完成其工作之后才会存在。
构造函数是创建新对象还是调用对象时 构造函数立即被调用?
据说构造函数和析构函数不是继承的 从基类到派生类,但是下面是一个程序 矛盾,我们正在创建派生类的对象,但它 输出基类的构造函数和析构函数吗?
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叫
Dest B叫
Dest A called
答案 0 :(得分:1)
派生类D
不会从B
继承构造函数,因为没有指定明确的D
构造函数,我可以使用B(int)
来构造{ {1}}。
但是,我能做的是在派生类构造函数的定义中使用基类构造函数,如new D(1);
。
不太抽象,假设我有D::D(void) : B(1) {}
的构造函数,它带有Person
参数,我可能希望创建一个:
gender
构建class Son: Person{
public:
Son(void) : Person(male) {};
};
,显然是Son
,但肯定不需要参数化Person
。
析构函数是“继承的”,因为在gender
的结束时隐含了对D::~D(){}
的调用。