请教c++虚函数

来源:百度知道 编辑:UC知道 时间:2024/06/11 22:50:37
有个关于虚函数的程序偶不大理解,请教高手指点迷津!!谢谢~
程序如下:
#include<iostream>
using namespace std;
class Base
{
public:
virtual void fn(){cout<<"In Base class\n";}
};
class Sub:public Base
{
public:
virtual void fn(){cout<<"In Sub class\n";}
};
void test(Base& b)
{
b.fn();
}
int main()
{
Base bc;
Sub sc;
test(bc);
test(sc);
}
我想问在main函数里Sub类对象sc调用test函数时,将实参sc传递给
Base类引用形参b 后,b就代表了sc对象中的Base 部分。但为什么
b.fn();还能调用Sub 类中的fn()呢?b不是已经定义为Base类 的引用么,只能
调用Base 类中的fn()的呀?谢谢您~~呵呵

引用就是指针,至少在作函数参数传递时是同义词

引用与指针都是多态编程的经典技巧

引用并不调用什么拷贝构造函数,说白了就相当与传递4个字节的指针变量

如果类族中的同名函数不是声明为虚函数,那么调用过程就会如你说的那样,父类调用父类的,子类调用子类的,但是虚函数解决了这一问题,让基类对象根据自己的指向调用各类的同名函数。
谭浩强书中关于虚函数使用的最常用的例子就是:
class A{
public:virtual void fun(){cout<<"class A\n";}
};
class B:public A{
public:virtual void fun(){cout<<"class B";}
};
void main(){
A *myclass=new A();
myclass->fun();
myclass=new B();
myclass->fun();
}
输出:
class A
class B

希望可以帮到你~