Может кто-нибудь сказать мне, что не так с моей программой ниже? Я использую переменную-элемент ссылки в классе для полиморфизма. Я ожидаю, что второй cout скажет «производный 2», но он говорит «база»;полиморфизм с переменным ссылочного элемента
#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);
}
Выход: база база
Вы должны знать, что почти никогда не хотите использовать ссылки в качестве переменных-членов. –