c++ - 使用派生类创建基类对象

标签 c++

我有以下代码:

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

如果您想知道“如何将派生类对象传递给接受对基类的引用的方法”,请阅读以下内容:
  • Is it possible to pass derived classes by reference to a function taking base class as a parameter
  • 关于c++ - 使用派生类创建基类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61385393/

    相关文章:

    c++ - std::map 分配器绑定(bind)到所有键和值的堆?

    c++ - 为什么 "this"在具有多个基类的类的父类中发生变化?

    c++ - CUDA 内核行为取决于 block 和线程的数量,即使不使用也是如此

    c++ - 提供给 std::generate 的仿函数可以是有状态的吗?

    c++ - 向 Microsoft 提供有关 MFC 的反馈

    c++ - 如何在运行时在 OpenCL 中获取计算单元 ID?

    java - 如何通过JNI设置Java对象的多维数组字段

    c++ - 如何在U盘中制作安装程序?

    PHP 系统()参数

    c++ - 理解 z 缓冲区格式 direct x