在c++; 我是C++新手 我有两个关于如何调用基构造函数的查询

在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

1.) 假设我的代码看起来有点像这样

#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
 { ....
  }