在c++; 我是C++新手 我有两个关于如何调用基构造函数的查询
1.) 假设我的代码看起来有点像这样在c++; 我是C++新手 我有两个关于如何调用基构造函数的查询,c++,inheritance,constructor,C++,Inheritance,Constructor,1.) 假设我的代码看起来有点像这样 #include<iostream> using namespace std; class Base { public: Base() { cout<<"Constructor: Base"<<endl; } virtual ~Base() { cout<<"Destructor : Base"<<endl; } }; class Derived: public Ba
#include<iostream>
using namespace std;
class Base {
public:
Base() { cout<<"Constructor: Base"<<endl; }
virtual ~Base() { cout<<"Destructor : Base"<<endl; }
};
class Derived: public Base {
public:
Derived() { cout<<"Constructor: Derived"<<endl; }
~Derived() { cout<<"Destructor : Derived"<<endl; }
};
int main() {
Base *Var = new Derived();
delete Var;
return 0;
}
2.)现在假设基类构造函数采用参数化参数,但派生构造函数为空。在main函数中,我声明了一个派生对象,没有任何构造函数参数。会发生什么?有没有办法分别向该对象的基构造函数传递参数
谢谢。如果要从
派生的调用的基构造函数不是默认值,只需使用初始化列表,如:
Derived::Derived() : Base(args) {
// ...
}
您不需要在派生构造函数中调用基构造函数。这是自动完成的-始终。
如果要显式调用构造函数,可以随时通过如下方式指定类命名空间和构造函数(应相同):
PointerToObject->ClassName::ClassName(Parameters);
(但这被认为是一种“NoNo!”——糟糕的风格,因为在良好的设计中,它应该不是必需的)首先调用基类的构造函数。这是因为它是在派生类中继承的,所以调用构造函数的顺序类似于先继承的类,先调用它的构造函数,然后调用继承基类的类的构造函数。
让我们举个例子
class a: public b,public c,public d
{ ....
}
然后它将首先调用类b的构造函数,然后调用c,然后调用d,然后调用a
在析构函数的情况下,您已经将基类的析构函数设置为虚拟的,所以当您编写delete Var时,它正在调用派生类的析构函数。
在删除所有对象的最后,调用基类的析构函数。Ummm。。。真的吗-P查看ideone.com的代码示例,或者您的意思不同…?嗯,好的,VisualC++对此没有问题。无论如何,使用已经提出的构造函数转发是正确的方法。这不是所谓的“构造函数转发”吗?根据我的理解,初始化列表或“初始化列表”应该是用于初始化的“花括号值列表”instances@OleDittmann具体来说,它被称为成员初始值设定项列表
,不要与您所想的列表初始化
相混淆。
class a: public b,public c,public d
{ ....
}