在A类中,我没有定义任何带参数的构造函数。在类B中,它是类A的派生类,我定义了一个复制构造函数,它将B的引用传递给A的构造函数。看到这段代码传递了编译并且输出在下面是很奇怪的。有人可以解释一下吗?
// Example program
#include <iostream>
#include <string>
class A{
public:
A(){ std::cout<<"A constructor called"<<std::endl;};
~A(){};
};
class B:private A{
public:
B(){std::cout<<"B default constructor called"<<std::endl;};
B(const B& b): A(b){std::cout<<"B constructor called"<<std::endl;};
};
int main()
{
B b{};
B b2{b};
return 0;
}
输出
A constructor called
B default constructor called
B constructor called
答案 0 :(得分:3)
A(b)
调用A
中的复制构造函数,它是由编译器为您提供的。
通过写作来了解自己
A(const A& a) {std::cout << "A copy constructor called\n";}
课程A
中的。这是完全定义良好的C ++。
答案 1 :(得分:0)
我问过后五分钟就知道了。它实际上是调用由编译器
创建的A的复制构造函数