c实现面向对象

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;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值