C++多态与虚函数简单介绍

来源:互联网 发布:人有天敌吗 知乎 编辑:程序博客网 时间:2024/04/27 18:46

多态:
 子类中对父类已有成员函数进行重新定义(返回类型和参数不变,只是改变函数的

内部代码实现方式, 否则就是重载而非多态), 并加上virtual声明为虚函数,从

而形成多态, 在调用此系列成员函数时由对象所属的类自动来区别调用哪个函数.如

下虚函数的实现:

 class A
 {
    public:
       virtual int getAge()
       {
       }

 }

 class B :public A
 {
    public:
        virtual int getAge()
        {
        }
  }


有关虚函数限制:
1) 只有类的成员函数才能成为虚函数
2) 静态成员不能是虚函数, 因为它不受限于具体对象,静态成员属于整个类,它

不属于某个具体的对象。
3) 内联函数不能是虚函数, 因为它不能在运行中动态确定其位置,内联函数在编

译时就确定了函数的调用地址。
4) 构造函数不能时虚函数, 因为构造时对象还是一片未定型的空间,构造函数执

行的时候对象还是未确定的。
5) 析构函数可以是虚函数, 而且通常声明为虚函数, 如基类对象和子类对象以不

同方式申请了堆空间后:
   void finishWithObject(Base *pHeapObject)
   {
       //..
       delete pHeapObject;
   }

   pHeapObject是传递过来的一个对象指针, 它或者指向基类对象或指向子类对象

。 在执行delete pHeapObject时, 要调用析构函数,但是执行基类的析构函数?

还是执行子类的析构函数? 将析构函数声明为虚的,就可以解决这个问题。程序会

根据pHeapObject具体的类型来决定到底是调用父类还是子类的析构函数。

 

原创粉丝点击