在类的定义中,前面有 virtual 关键字的成员函数就是虚函数。
virtual 关键字只用在类定义里的函数声明中,写函数体时不用。
多态的表现形式一
下面给出一段代码:
class CBase {
public:
virtual void SomeVirtualFunction() { }
};
class CDerived:public CBase {
public :
virtual void SomeVirtualFunction() { }
};
int main() {
CDerived ODerived;
CBase * p = & ODerived;
p -> SomeVirtualFunction(); //调用哪个虚函数取决于p指向哪种类型的对象
return 0;
}
多态的表现形式二
class CBase {
public:
virtual void SomeVirtualFunction() { }
};
class CDerived:public CBase {
public :
virtual void SomeVirtualFunction() { }
};
int main() {
CDerived ODerived;
CBase & r = ODerived;
r.SomeVirtualFunction(); //调用哪个虚函数取决于r引用哪种类型的对象
return 0;
}
多态的简单示例
class A {
public :
virtual void Print( )
{ cout << "A::Print"<<endl ; }
};
class B: public A {
public :
virtual void Print( ) { cout << "B::Print" <<endl; }
};
class D: public A {
public:
virtual void Print( ) { cout << "D::Print" << endl ; }
};
class E: public B {
virtual void Print( ) { cout << "E::Print" << endl ; }
};
int main() {
A a; B b; E e; D d;
A * pa = &a; B * pb = &b;
D * pd = &d ; E * pe = &e;
pa->Print();
pa = pb;
pa -> Print();
pa = pd;
pa -> Print();
pa = pe;
pa -> Print();
return 0;
}