多態的兩種實現方法
多態體現在父類和派生類之間,通過函數覆蓋,實現在運行過程中動態調用函數。
必要條件:
(1)父類中將該函數聲明為virtual
(2)子類中完全一致的覆蓋父類中的函數,要求返回值、函數名、參數都一致
(3)通過指針或者借助于函數來實現
方法一(利用指針):
#include <iostream.h>
class A
{
public:
virtual void func()
{
cout<<"A::func()"<<endl;
}
}
class B: public A
{
public:
void func()
{
cout<<"B::func()"<<endl;
}
}
void main()
{
A tmp=new B();//A tmp=new B;也行
tmp->func();
B tmp2;
((A *)&tmp2)->func();
}
方法二(利用函數):
#include <iostream.h>
class A
{
public:
virtual void func()
{
cout<<"A::func()"<<endl;
}
void test()
{
func();//***//
}
}
class B: public A
{
public:
void func()
{
cout<<"B::func()"<<endl;
}
}
void main()
{
B tmp;
tmp.test();
}
對于//***//行,有很多說道,“func();”等價于“this.func()”,能否實現多態,關鍵是看這里的this指向父類還是子類,由于this指針必須得指向某個對象,當我們用“B tmp”或者“A tmp=new B”構造完對象tmp后,由于tmp本質上都是一個B的對象,因此該this指針就是指向子類的。
posted on 2008-02-23 19:28 so true 閱讀(1060) 評論(0) 編輯 收藏 所屬分類: C&C++