C語言中的面向對象(1)-類模擬和多態,繼承

發表于:2007-07-14來源:作者:點擊數: 標簽:
C語言中的 面向對象 (1)-類模擬和多態,繼承: 在面向對象的語言里面,出現了類的概念。這是編程思想的一種進化。所謂類:是對特定數據的特定操作的集合體。所以說類包含了兩個范疇:數據和操作。而C語言中的struct僅僅是數據的集合。(liyuming1978@163.com
C語言中的面向對象(1)-類模擬和多態,繼承:  在面向對象的語言里面,出現了類的概念。這是編程思想的一種進化。所謂類:是對特定數據的特定操作的集合體。所以說類包含了兩個范疇:數據和操作。而C語言中的struct僅僅是數據的集合。(liyuming1978@163.com)

  1.實例:下面先從一個小例子看起
#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);//成員函數,因為效率問題不使用函數指針       return 0;}

  輸出結果:

11
It is B.c=13
It is A.a=1
It is B_Fun

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97