zl程序教程

您现在的位置是:首页 >  后端

当前栏目

【C/C++学院】0804-C语言和设计模式(继承、封装、多态)

2023-09-14 08:57:16 时间
p align= left C++有三个最重要的特点,即继承、封装、多态。 a target= _blank name= _GoBack /a 我发现其实C语言也是可以面向对象的,也是可以应用设计模式的,关键就在于如何实现面向对象语言的三个重要属性。 /p p align= left strong span >C++有三个最重要的特点,即继承、封装、多态。我发现其实C语言也是可以面向对象的,也是可以应用设计模式的,关键就在于如何实现面向对象语言的三个重要属性。

(1)继承性

1.  typedef struct _parent  

2. {  

3.      int data_parent;  

4.   

5.  }Parent;  

6.   

7.  typedef struct _Child  

8. {  

9.      struct _parent parent;  

10.    int data_child;  

11.   

12.}Child;  

   在设计C语言继承性的时候,我们需要做的就是把基础数据放在继承的结构的首位置即可。这样,不管是数据的访问、数据的强转、数据的访问都不会有什么问题。

(2)封装性

1.  struct _Data;  

2.   

3.  typedef  void (*process)(struct _Data* pData);  

4.   

5.  typedef struct _Data  

6. {  

7.      int value;  

8.     process pProcess;  

9.        

10.}Data;  

   封装性的意义在于,函数和数据是绑在一起的,数据和数据是绑在一起的。这样,我们就可以通过简单的一个结构指针访问到所有的数据,遍历所有的函数。封装性,这是类拥有的属性,当然也是数据结构体拥有的属性。


(3)多态

1.  typedef struct _Play  

2. {  

3.      void* pData;  

4.     void (*start_play)(struct _Play* pPlay);  

5.  }Play;  

   多态,就是说用同一的接口代码处理不同的数据。比如说,这里的Play结构就是一个通用的数据结构,我们也不清楚pData是什么数据,start_play是什么处理函数?但是,我们处理的时候只要调用pPlay- start_play(pPlay)就可以了。剩下来的事情我们不需要管,因为不同的接口会有不同的函数去处理,我们只要学会调用就可以了。


#include stdio.h 

#include stdlib.h 

struct cmd

 char *p;

 void(*prun)(struct cmd *pcmd);

 void(*pprint)(struct cmd *pcmd);

typedef struct cmd CMD;

void run(CMD *pcmd )

 system(pcmd- 

void print(CMD *pcmd)

 printf("%s", pcmd- 

struct newcmd

 struct cmd cmd1;

 int(*plength)(struct newcmd *pnewcmd);

int getlength(struct newcmd *pnewcmd)

 return strlen(pnewcmd- cmd1.p);//返回长度