C语言的面向对象写法

来源:互联网 发布:淘宝上可信的澳洲代购 编辑:程序博客网 时间:2024/06/04 23:01

C是面向过程的语言。面向对象是一种思想。利用一些c的技巧还是可以实现面向对象的。
参考原文:http://www.codeproject.com/Articles/108830/Inheritance-and-Polymorphism-in-C
翻译的:http://www.cnblogs.com/skynet/archive/2010/09/23/1833217.html
写得很好,例子命名与c规范也很值得参考。
以下为我对着敲一遍的代码。继承只是多了个指针。多态由于还没用到,先保留此文备以后学习。

//Person.htypedef struct _Person Person;//declaration of pointers to functionstypedef void    (*fptrDisplayInfo)(Person*);typedef void    (*fptrWriteToFile)( Person*, const char*);typedef void    (*fptrDelete)( Person* );//为了简化教程,下面都是默认的public typedef struct _Person{    char* pFName;    char* pLName;    //interface for function    fptrDisplayInfo     Display;    fptrWriteToFile     WriteToFile;    fptrDelete  Delete;}Person;//constructorPerson* new_Person(const char* const pFirstName, const char* const pLastName);//destructorvoid delete_Person(Person* const pPersonObj);void Person_DisplayInfo(Person* const pPersonObj);void Person_WriteToFile(Person* const pPersonObj, const char* pFileName);//Person.c//Person* new_Person(const char* const pFirstName, const char* const PLastName){    Person* pObj = NULL;    pObj = (Person*)malloc(sizeof(Person));    if (pObj == NULL)        return NULL;    pObj->pFirstName = malloc(sizeof(char) * (strlen(pFirstName) + 1) );    if (pObj->pFirstName == NULL)        return NULL;    strcpy(pObj->pFirstName, pFirstName);    pObj->pLastName = malloc(sizeof(char) * (strlen(pLastName) + 1));    if (pObj->pLastName == NULL)        return NULL;    strcpy(pObj->pLastName, pFirstName);    pObj->Delete = delete_Person;    pObj->Display = Person_DisplayInfo;    pObj->WriteToFile = Person_WriteToFile;    return pObj;}//After the object creation, we can access its data members and functions//Person* pPersonObj = new_Person("Fa", "Kai");pPersonObj->Display(pPersonObj);pPersonObj->WriteToFile(pPersonObj, "persondata.txt");pPersonObj->Delete(pPersonObj);pPersonObj = NULL;
0 0
原创粉丝点击