C++遗传问题10

以下程序的输出?

null

#include <iostream>
#include<string>
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;
}


(A)

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) 说明: 注意,在descripe(d)中传递了一个派生的对象,但调用了Base的print。descripe函数接受基类型的参数。

这是一个典型的对象切片示例,当我们将派生类的对象分配给基类的对象时,派生类对象被切片,从基类继承的所有数据成员都被复制。对象切片应该是卵形的,因为可能会出现上述令人惊讶的结果。顺便说一句,对象切片在Java中是不可能的。在Java中,每个非基本变量实际上都是一个引用。 这个问题的小测验

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享