龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C++:虚函数与抽象类(2)

时间:2009-12-22 15:42来源:未知 作者:admin 点击:
分享到:
结果: 0:0:0 0:0:0@+8 本来,基类指针是指向基类对象的,如果用它指向派生类对象,则进行指针类型转换,将派生类对象的指针先转换为基类指针,所以基

  结果:

  0:0:0

  0:0:0@+8

  本来,基类指针是指向基类对象的,如果用它指向派生类对象,则进行指针类型转换,将派生类对象的指针先转换为基类指针,所以基类指针指向的是派生类对象中的基类部分。在程序修改前,是无法通过基类指针去调用派生类对象中的成员函数的。

  虚函数突破这一限制,在派生类的基类部分中,派生类的虚函数取代了基类原来的虚函数,因此在使用基类指针指向派生类对象后,调用虚函数时就调用了派生类的虚函数。

  1.2虚函数的使用方法

  【1】在基类用virtual声明成员函数为虚函数。这样就可以在派生类中重新定义此函数,为它赋予新的功能,并能方便地被调用。

  【2】在派生类中重新定义此函数,要求函数名、函数(返回)类型、函数参数个数和类型与基函数的虚函数相同。如果在派生类中没有对基类的虚函数重定义,则派生类简单地继承直接基类的虚函数。

  有一种情况例外,在这种情况下派生类与基类的成员函数返回类型不同,但仍起到虚函数的作用。即基类虚函数返回一个基类指针或基类引用,而子类的虚函数返回一个子类的指针或子类的引用。

class Base{

 public:

  virtual Base *fun(){

   cout<<"Base's fun()."<

   return this;

  }

};

class Derived:public Base{

 public:

  virtual Derived *fun(){

   cout<<"Derived's fun()."<

   return this;

  }

};

void test(Base &x){

 Base *b;

 b=x.fun();

}

int main(){

 Base b; 

 Derived d;

 test(b);

 test(d);  

 system("PAUSE");

 return EXIT_SUCCESS;

}

精彩图集

赞助商链接