so true

心怀未来,开创未来!
随笔 - 160, 文章 - 0, 评论 - 40, 引用 - 0
数据加载中……

多态的两种实现方法

多态体现在父类和派生类之间,通过函数覆盖,实现在运行过程中动态调用函数。
必要条件:
(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 阅读(1049) 评论(0)  编辑  收藏 所属分类: C&C++


只有注册用户登录后才能发表评论。


网站导航: