📜  C++ |继承|问题10

📅  最后修改于: 2021-05-25 20:29:00             🧑  作者: Mango

以下程序的输出?

#include 
#include
using namespace std;
  
class Base
{
public:
    virtual string print() const
    {
        return "This is Base class";
    }
};
  
class Derived : public Base
{
public:
    virtual string print() const
    {
        return "This is Derived class";
    }
};
  
void describe(Base p)
{
    cout << p.print() << endl;
}
  
int main()
{
    Base b;
    Derived d;
    describe(b);
    describe(d);
    return 0;
}

(一种)

This is Derived class
This is Base class

(B)

This is Base class
This is Derived class

(C)

This is Base class
This is Base class

(D)编译器错误答案: (C)
说明:请注意,Described对象是在describe(d)中传递的,但是调用了Base的打印。 describe函数接受基本类型的参数。

这是对象切片的一个典型示例,当我们将派生类的对象分配给基类型的对象时,切出派生类对象,并复制从基类继承的所有数据成员。应该避免对象切片,因为可能会出现类似上面的令人惊讶的结果。附带说明一下,在Java无法进行对象切片。在Java,每个非基本变量实际上都是一个引用。
这个问题的测验

想要从精选的最佳视频中学习和练习问题,请查看《基础知识到高级C的C基础课程》。