您的位置:首页 > 其它

c实现面向对象

2015-09-10 18:03 197 查看
c语言的结构体里面没有函数,但是c++里面有函数,所以今天实现一个c语言面向对象的程序

1、封装

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct cmd
{
char *p;
void (*prun)(struct cmd *pcmd);//函数指针
void (*pprint)(struct cmd *pcmd);
}newcmd;

void run(newcmd *pcmd)
{
system(pcmd->p);
}
void print(newcmd *pcmd)
{

printf("%s",pcmd->p);
}

int main()
{

newcmd newcmd1 = {"notepad", run, print};//在定义的时候初始化
newcmd1.pprint(&newcmd1);
newcmd1.prun(&newcmd1);

return 0;
}
注意:1)、函数指针,指向函数代码段的指针,传递相应函数地址,即可调用

2)、结构体初始化时,可以在定义的时候直接初始化,但是允许在定义后再初始化,例如:

newcmd newcmd1;
newcmd1 = {"notepad", run, print};
程序就会报错

但是每个成员可以单独初始化:

newcmd1.p = "notepad";
newcmd1.prun = run;
newcmd1.pprint = print;

2、继承

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct cmd
{
char *p;
void (*prun)(struct cmd *pcmd);
void (*pprint)(struct cmd *pcmd);
}CMD;

typedef struct newcmd
{
CMD cmd1;//继承
int (*plength)(struct newcmd *pnewcmd);
}Newcmd;

int getlength(Newcmd *pNewcmd)
{
return strlen(pNewcmd->cmd1.p);
}
void run(CMD *pcmd)
{
system(pcmd->p);
}
void print(CMD *pcmd)
{

printf("%s",pcmd->p);
}

int main()
{
Newcmd newcmd1;
newcmd1.cmd1.p = "calc";
newcmd1.cmd1.pprint = print;
newcmd1.cmd1.prun = run;
newcmd1.plength = getlength;
print(&newcmd1.cmd1);
run(&newcmd1.cmd1);
printf("%d\n",getlength(&newcmd1));
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: