2、说明

 

考虑C++中的一个类"Person"。

//Person.h

class Person

{

private:

char* pFirstName;

char* pLastName;

 

public:

Person(const char* pFirstName, const char* pLastName); //constructor

~Person(); //destructor

 

void displayInfo();

void writeToFile(const char* pFileName);

 

};

 

创建完对象之后,我们能够访问它的数据成员和函数。

Person* pPersonObj = new_Person("Anjali", "Jaiswal");

//displaying person info

pPersonObj->Display(pPersonObj);

//writing person info in the persondata.txt file

pPersonObj->WriteToFile(pPersonObj, "persondata.txt");

//delete the person object

pPersonObj->Delete(pPersonObj);

pPersonObj = NULL;

3、在C中类的表现

 

继承-Employee类继承自Person类:

 

 

 

3.2、在C中结构体中的等效表示

 

如图所示,我们在基类结构体中声明了一个指针保存派生类对像,并在派生类结构体中声明一个指针保存基类对象。

 

创建Person对象

//Person.h

 

typedef struct _Person Person;

 

//pointers to function

typedef void (*fptrDisplayInfo)(Person*);

typedef void (*fptrWriteToFile)(Person*, const char*);

typedef void (*fptrDelete)(Person*) ;

 

typedef struct _person

{

void* pDerivedObj;

char* pFirstName;

char* pLastName;

fptrDisplayInfo Display;

fptrWriteToFile WriteToFile;

fptrDelete Delete;

}person;

 

Person* new_Person(const char* const pFristName,

const char* const pLastName); //constructor

void delete_Person(Person* const pPersonObj); //destructor

 

void Person_DisplayInfo(Person* const pPersonObj);

void Person_WriteToFile(Person* const pPersonObj, const char* const pFileName);

 

//Person.c

//construction of Person object

Person* new_Person(const char* const pFirstName, const char* const pLastName)

{

Person* pObj = NULL;

//allocating memory

pObj = (Person*)malloc(sizeof(Person));

if (pObj == NULL)

{

return NULL;

}

//pointing to itself as we are creating base class object

pObj->pDerivedObj = pObj;

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, pLastName);

 

//Initializing interface for access to functions

//destructor pointing to destrutor of itself

pObj->Delete = delete_Person;

pObj->Display = Person_DisplayInfo;

pObj->WriteToFile = Person_WriteToFile;

 

return pObj;

}

C中的继承和多态_C/C++

Employee对象的结构

结论