在C++中,多态性的一个重要表现形式之一是:具有不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数。
从系统实现的角度看,多态性分为两类,静态多态性和动态多态性。
静态多态性是在程序编译时系统就能决定要调用哪个函数,通过函数的重载实现的,又称为编译时的多态性。动态多态性不在编译时确定调用的时那个函数,而是在程序运行时才动态确定操作所针对的对象。是通过虚函数实现的,又称为运行时的多态性。
虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。
虚函数的使用方法:
1,:在基类中用virtual声明成员函数为虚函数。在类外定义时,不必再加virtual]。
2:在派生类中重新定义此函数,函数名,函数类型,函数参数个数和类型必须与基类的虚函数相同,根据派生类的需要重新定义函数体。
3:当一个成员函数被声明为虚函数后,其派生类中的同名函数都自动成为虚函数。因此在派生类中重新定义该虚函数时,可以加virtual,
也可以不加,但习惯上一般每层都加。
4:如果在派生类中没有对基类的虚函数的重新定义,则派生类简单的继承其直接基类的虚函数。
5:定义一个指向基类对象的指针,使它指向同一类族中需要调用该函数的对象。
6:加一个Virtual,内存中会多四个字节,用于指向虚函数表。
以下是一个小例子:
#include<iostream>
using namespace std;
class A
{
public :
A ()
{a=0;}
virtual void display()
{cout<<"a="<<a<<endl;}
private :
int a;
};
class B:public A
{
public :
B()
{b=1;}
void display()
{cout<<"b="<<b<<endl;}
private :
int b;
};
class C:public B
{
public :
C(){c=2;}
void display()
{cout<<"c="<<c<<endl;}
private :
int c;
};
void main()
{
A *p;
A a;
B b;
C c;
p=&b;
p->display();
cout<<sizeof(a)<<endl;
cout<<sizeof(b)<<endl;
cout<<sizeof(c)<<endl;
}