天天看點

c++中多态性 code Test

//c++中的多态主要就是利用基類指針或者引用,去指向派生類對象,調用基類虛函數時調用     //的就是派生類的資料和方法。

#include "stdafx.h"

#include

#include

#include

using namespace std;

class AAbstract

{

public:

   AAbstract(){}

   int data;

   void dis() { printf(" abstract ......data = %d \n",data); }

};

class AB_test : public AAbstract

{

public:

   AB_test():AAbstract(){}

   int bData;

   void dis() { printf(" drived ........Data = %d  bData = %d \n",data,bData); }

};

//

class bAbstract

{

public:

   bAbstract(){}

   int data;

   virtual void dis() { printf(" bbstract ......data = %d \n",data); }

};

class bB_test : public bAbstract

{

public:

   bB_test():bAbstract(){}

   int bData;

   void dis() { printf(" bdrived ........Data = %d  bData = %d \n",data,bData); }

};

int main(int argc, char* argv[])

{

   AAbstract a ;

   AB_test b;

   a.data = 1;

   a.dis();

   b.bData = 2;

   b.data = 3;

   b.dis();

   a = b;

   a.dis();//調用的是AAbstract的function,隻是将資料指派給AAbstract了。

   AAbstract *c = new AAbstract();

   AB_test *d = new AB_test();

   d->data = 4;

   d->bData = 5;

   d->dis();

   c = d;  //the same to up state

   c->dis();

   AAbstract *f = new AAbstract();

   f->data = 6;

   f->dis(); //the same to up state

   bAbstract g ;

   bAbstract *p;

   bB_test h ;

   g.data = 7;

   h.bData = 8;

   h.data = 9;

   g.dis();

   h.dis();

   g = h;

   g.dis();  //虛的不起作用,必須指針

   p = &h;

   p->dis();

   bAbstract *j = new bAbstract();

   bB_test *k = new bB_test();

   j->data = 10;

   k->bData = 11;

   k->data = 12;

   j->dis() ;

   k->dis();

   j = k;

   j->dis();  //調用了虛函數 實作多台,裡面data都是k的。

              //bdrived ........Data = 12  bData = 11

   bAbstract *l ;

   bB_test n;

// l->data = 13;  //第一個類沒有空間,指派是錯的。

// l->dis();

   n.data = 14;

   n.bData = 15;

   n.dis();

   l  = &n;

   l->dis(); //虛函數 //和上面的是一樣的

   //1.總體上,虛函數就是基類指針定義一個對象或者作為function參數 fun(aa *b)使用

   //2.基類指針指向派生的,虛function 就調用了派生類的data和func,不用定義更多對象

   //3.基類必須是指針和引用才管用,對象型的虛不起作用。

   return 0;

}