关于C++的多态实现机理问题

来源:百度知道 编辑:UC知道 时间:2024/06/20 11:00:40
下面是一段多态的测试代码:
#include <iostream.h>
class Base
{
public:
void fn()
{
cout<<"in base class"<<endl;
}
};

class SubClass:public Base
{
public :
void fn()
{
cout<<"in sub class"<<endl;
}
};

void test(SubClass &b)
{
b.fn();
}

void main()
{
Base bc;
SubClass sc;
cout<<"calling test(bc)"<<endl;
test(sc);
sc.fn();
cout<<"calling test(sc)"<<endl;
test(sc);
}

其中的
void test(SubClass &b)
{
b.fn();
}
传入的是引用,我改为值传递,即
void test(SubClass b)
{
b.fn();
}
结果无法实现多态的效果,输出都是基类的信息,请问这是为什么,从内存角度来说,值传递和引用传递为什么为如此不同.谢谢您的参与.

我没看你的程序
不过如果你把一个派生类的对象复制给一个基类的对象的话,那么派生类派生出来的属性都会消失
而如果是引用的话,传递的是一个地址
这时候你用一个基类的指针指向这个地址,再调用基类中声明了的在派生类中重写的方法,得到的是派生类调用该方法的结果。
不要问为什么,c的实现就是这样的,如果你觉得不爽,你可以重载=来实现你想要的结果,或者不要用c
值传递是执行一遍拷贝构造函数
引用传递是传递改变量的地址。
这就是区别

首先肯定一点的是,你的程序不能模拟多态.你只是重写了基类的功能函数,要实现多态,必要的条件是虚函数.
其次,你肯定没有手误?按照你的代码似乎并不是你所说的输出结果.

关键问题是你没有在父类中定义成虚函数。