【发布时间】:2017-06-04 17:02:42
【问题描述】:
谁能告诉我下面的程序有什么问题?我在一个类中使用一个引用成员变量来实现多态性。我期待第二个 cout 说“derived2”,但它说“base”;
#include <iostream>
// Example program
#include <iostream>
#include <string>
class base
{
public:
virtual void print(){ std::cout<<"base"<<std::endl;}
};
class derived: public base
{
public:
virtual void print(){ std::cout<<"derived"<<std::endl;}
};
class derived2: public base
{
virtual void print(){ std::cout<<"derived2"<<std::endl;}
};
class foo
{
public:
base & bar;
base boo;
derived foobar;
derived2 foobar2;
foo(): bar(boo){}
void newfoo(base & newfoo){ bar = newfoo; bar.print();}
};
int main()
{
foo test;
test.bar.print();
test.newfoo(test.foobar2);
}
输出: 根据 基地
【问题讨论】:
-
你应该知道你几乎从不想使用引用作为成员变量。
标签: c++ reference polymorphism pass-by-reference