虚函数和多态
虚函数
在类的定义中,前面有 virtual 关键字的成员函数就是虚函数。
class base
{
virtual int get() ;
};
int base::get() {
}
virtual 关键字只用在类定义里的函数声明中,写函数体时不用
多态
多态的表现形式
一、
1、派生类的指针可以赋给基类指针。
2、通过基类指针调用基类和派生类中的同名虚函数时:
(1)若该指针指向一个基类的对象,那么被调用是基类的虚函数;
(2)若该指针指向一个派生类的对象,那么被调用的是派生类的虚函数。
这种机制就叫做“多态”。
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;
}
二、
1、派生类的对象可以赋给基类引用
2、通过基类引用调用基类和派生类中的同名虚函数时:
(1)若该引用引用的是一个基类的对象,那么被调用是基类的虚函数;
(2)若该引用引用的是一个派生类的对象,那么被调用的是派生类的虚函数。
这种机制也叫做“多态”。
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