c实现面向对象
2015-09-10 18:03
197 查看
c语言的结构体里面没有函数,但是c++里面有函数,所以今天实现一个c语言面向对象的程序
1、封装
2)、结构体初始化时,可以在定义的时候直接初始化,但是允许在定义后再初始化,例如:
但是每个成员可以单独初始化:
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;
}
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;
}
相关文章推荐
- Spring MVC之@RequestBody, @ResponseBody 详解
- mybatis实战教程(mybatis in action),mybatis入门到精通
- JUnit编写单元测试代码注意点小结
- Java对象clone
- mysql开启慢查询日志
- HDU 3613 Best Reward
- mysql 年龄段划分
- 读Swift官方文档的收获(一)
- tomcat中设置多项目共享jar;类包
- 从TCP协议的原理来谈谈rst复位攻击
- //问题:Calendar 到底是不是单例模式? Date类
- 《代码的第一行——Android》封面诞生
- 0909 关于编译原理学习的想法
- spring原理
- tomcat中设置多项目共享jar;类包
- Java的ArrayList源码浅析
- log4net使用教程
- Socket 客户端和服务端无限次通信,多个客户端和服务端通信的例子
- [Leetcode]Perfect Squares
- Grunt JS构建环境搭建以及使用入门