c++ - 为什么基类的构造方法被调用了两次?

标签 c++ c++11

谁能告诉我为什么基类的构造方法被调用了两次?

#include <iostream>
using namespace std;

class A{
    public:
    A(){
        cout << "default constructor of base class" << endl;
    }
};

class B:public A{
    public:
    B(){
        A();
        cout << "default constructor of derived class" << endl;
    }
};

int main(int argc, char **argv){
    B b;
    return 0;
}

我得到了这个意想不到的结果:

default constructor of base class
default constructor of base class
default constructor of derived class

最佳答案

一旦在 main 中构建了 B 对象的基础子对象:

B b;

一旦在 B 的构造函数中构造了临时的 A 对象:

A();

也许您打算初始化A 子对象;在初始化列表中执行此操作,而不是构造函数主体:

B() : A() {
    cout << "default constructor of derived class" << endl;
}

尽管在这种情况下,这样做与完全不使用它的效果完全相同。

关于c++ - 为什么基类的构造方法被调用了两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27297267/

相关文章:

c++ - C++中缩小和截断之间的区别?

c++ - 找不到用户定义的整数文字

c++ - mmap map 大小限制

c++11 - 标准前向实现和引用折叠

c++ - 并发写入 unordered_map (C++) 中的不同存储桶?

c++ - 在模板函数中调用 std::for_each 时的错误结果

c++ - Mac OS 中的 BLAS/LAPACK 和原来的 BLAS/LAPACK 有什么区别(如果有的话)?

android - Cocos2d-x视差无限滚动错误

c++ - xcode 关键字语法着色,不识别 c++ std::string

c++ - Flex和Bison生成C++头文件时如何使用m4?