c物件導向的編程列子

來源:互聯網
上載者:User

 

#include <stdio.h> 

#ifndef C_Class 
#define C_Class struct 
#endif 

C_Class A 

C_Class A *A_this; 
void (*Foo)(C_Class A *A_this); 
int a; 
int b; 
}; 

C_Class B 
{ //B繼承了A 
C_Class B *B_this; //順序很重要 
void (*Foo)(C_Class B *Bthis); //虛函數 
int a; 
int b; 
int c; 
}; 

void B_F2(C_Class B *Bthis) 

printf("It is B_Fun\n"); 

void A_Foo(C_Class A *Athis) 

printf("It is A.a=%d\n",Athis->a);//或者這裡 
// exit(1); 
// printf("純虛 不允許執行\n");//或者這裡 

void B_Foo(C_Class B *Bthis) 

printf("It is B.c=%d\n",Bthis->c); 

void A_Creat(struct A* p) 

p->Foo=A_Foo; 
p->a=1; 
p->b=2; 
p->A_this=p; 

void B_Creat(struct B* p) 

p->Foo=B_Foo; 
p->a=11; 
p->b=12; 
p->c=13; 
p->B_this=p; 

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

C_Class A *ma,a; 
C_Class B *mb,b; 

A_Creat(&a);//執行個體化 
B_Creat(&b); 
mb=&b; 
ma=&a; 
ma=(C_Class A*)mb;//引入多態指標 
printf("%d\n",ma->a);//可惜的就是 函數變數沒有private 
ma->Foo(ma);//多態 
a.Foo(&a);//不是多態了 
B_F2(&b);//成員函數,因為效率問題不使用函數指標 
getchar(); 
return 0; 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.