以下程序的输出?
#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基础课程》。