您的位置:首页 > 编程语言 > C语言/C++

C语言的面向对象写法

2016-06-23 14:23 399 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/study_sky/article/details/51743183

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

//Person.h
typedef struct _Person Person;

//declaration of pointers to functions
typedef 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;

//constructor
Person* new_Person(const char* const pFirstName, const char* const pLastName);
//destructor
void 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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: