virtual function 的例子

本来这没什么可说的,C++中的虚函数不难理解,可是我看到不少教程中的例子给得不行,多说一句得。

那些教程给出的是类似下面的例子:

Base *p = new Derived;
p->virt_func();

我认为这个例子不行,只能显示虚函数啥样子,却不能说明白为什么要有虚函数。其实,至少我认为,虚函数是为了给函数传递参数用的,我使用基类指针作为函数参数类型的定义,但调用时却可以传递给它子类的指针,可虚函数的行为却是实参类型中的对应方法。我认为这才是虚函数的意义,为此我写了下面一个程序,顺便练练了刚学成的template recursion。

[cpp]

include

template
class C: public C
{
public:
virtual void foo();
};

template
void C::foo()
{
std::cout<<id<<std::endl;
}

template
class C
{
public:
virtual void foo();
};

void C::foo()
{
std::cout<<0<<std::endl;
}

void func(C *arg)
{
arg->foo();
}

int main()
{
C C1;
C C2;
C C3;

func(&amp;C1);
func(&amp;C2);
func(&amp;C3);
return 0;

}
[/cpp]