//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;
}