C++:虚函数与抽象类(2)
结果:
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; }
- 上一篇:C++:类型数据间的转换
- 下一篇:就地移动栈数据





