以下程序的输出?
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