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(&C1);
func(&C2);
func(&C3);
return 0;
}
[/cpp]