我有以下代码:
class A {
public:
A() { cout << "A()" << endl; }
void f() { cout << "A" << endl; }
};
class B : public A {
public:
B() { cout << "B()" << endl; }
void f() { cout << "B" << endl; }
void ff() { cout << "ff()" << endl; }
};
int main()
{
A a = B();
B b;
a = b;
}
调用
A a = B();
与A a = A();
有何不同?为什么可能从派生类转换为基类?
最佳答案
当您执行A a = B();
时,应在调用A
类的默认构造函数之后调用B
类的副本构造函数(注意:编译器可以使用copy elison删除不必要的副本)。
A(const A& other)
{
}
由于可以将
B
类的对象传递给A
类的副本构造函数,因此可以允许它,但您可能会遇到object-slicing。如果您想知道“如何将派生类对象传递给接受对基类的引用的方法”,请阅读以下内容:
关于c++ - 使用派生类创建基类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61385393/