【问题标题】:Creating base class object with a derived class使用派生类创建基类对象
【发布时间】:2020-08-06 16:05:12
【问题描述】:

我有以下代码:

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(); 有何不同?为什么可以从派生类转换为基类?

【问题讨论】:

  • How calling A a = B(); will be different from A a = A();? 在执行此行期间,除了A 之外,还将执行B 构造函数。执行此行后 - 由于slicing,存储在a 中的对象将完全相同。

标签: c++


【解决方案1】:

当您执行A a = B(); 时,应在调用类B 的默认构造函数后调用类A 的复制构造函数(注意:编译器可能会使用copy elison 删除不必要的复制)。

A(const A& other)
{

}

由于B 类的对象可以传递给A 类的复制构造函数,因此允许但您可能会遇到object-slicing

如果您想知道“如何将派生类对象传递给接受对基类的引用的方法”,请阅读以下内容:

  1. Is it possible to pass derived classes by reference to a function taking base class as a parameter

【讨论】:

    猜你喜欢
    • 2015-08-10
    • 2011-07-20
    • 1970-01-01
    • 2020-03-17
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    相关资源
    最近更新 更多