程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 用C語言實現面向對象程序設計(二)

用C語言實現面向對象程序設計(二)

編輯:關於C語言

上一篇:http://www.BkJia.com/kf/201301/184226.html
接口(interface)對行為進行抽象,利用它可以實現類的多態性,imeas.h定義了一個測量周長和面積的接口:   [cpp]  #ifndef __IMEAS_H__   #define __IMEAS_H__      #include "oosm.h"      /* Measuring Interface, for measuring the perimeter and area of objects */   interface(imeas)   {       double (*peri)(void* this); /* for measuring the perimeter of objects */       double (*area)(void* this); /* for measuring the area of objects */   };      #endif/*__IMEAS_H__*/   由於接口是抽象的,所以特別注意把this指針聲明為void*類型,這樣在進行指針轉換的時候會比較方便。 類(class)擁有屬性和方法,多態方法采用實現接口的方式來達成目的,crect.h/crect.c定義和實現了一個矩形類:   [cpp]  #ifndef __CRECT_H__   #define __CRECT_H__      #include "imeas.h"      /* Rectangle Class, for describing rectangle objects */   class(crect)   {       implements(imeas);  /* Implements imeas interface */       double width;       double height;   };      #endif/*__CRECT_H__*/     [cpp]   #include "crect.h"      static double peri(void* this)   {       return 2 * (((crect*)this)->width + ((crect*)this)->height);   }      static double area(void* this)   {       return ((crect*)this)->width * ((crect*)this)->height;   }      constructor(crect)   {       mapping(imeas.peri, peri);       mapping(imeas.area, area);   }      destructor(crect)   {       return 1;   /* Returns 1 for freeing the memory */   }   矩形類構造(constructor)時主要是進行方法的映射,這裡實現的是接口imeas中的方法,所以特別注意映射時寫成imeas.peri/imeas.area,構造後會自動生成crect_new宏函數。析構(destructor)中可以先釋放內部的空間後再返回1刪除自身,析構後會自動生成crect_delete宏函數。   同樣的,ccir.h/ccir.c定義是實現了圓形類:   [cpp]  #ifndef __CCIRC_H__   #define __CCIRC_H__      #include "imeas.h"      /* Circle Class, for describing circular objects */   class(ccirc)   {       implements(imeas);  /* Implements imeas interface */       double radius;       double (*diam)(ccirc* this);    /* for measuring the diameter of the circular objects */   };      #endif/*__CCIRC_H__*/   [cpp]   #include "ccirc.h"      #define PI  (3.1415926)      static double peri(void* this)   {       return 2 * PI * ((ccirc*)this)->radius;   }      static double area(void* this)   {       return PI * ((ccirc*)this)->radius * ((ccirc*)this)->radius;   }      static double diam(ccirc* this)   {       return 2 * this->radius;   }      constructor(ccirc)   {       mapping(imeas.peri, peri);       mapping(imeas.area, area);       mapping(diam, diam);   }      destructor(ccirc)   {       return 1;   /* Returns 1 for freeing the memory */   }   圓形類在實現imeas接口的基礎上,另有自己的diam方法,注意自己本身方法直接映射即可。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved