- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言中的类模拟C编程思想-Read
C 语言中的类模拟(C++编程思想)
在面向对象的语言里面,出现了类的概念。这是编程思想的一种进化。所谓类:是对特定数
据的特定操作的集合体。所以说类包含了两个范畴:数据和操作。而 C 语言中的 struct仅仅是数
据的集合。(liyuming1978@163.com)
1.实例:下面先从一个小例子看起
#ifndef C_Class
#define C_Class struct
#endif
C_Class A {
C_Class A *A_this;
void (*Foo)(C_Class A *A_this);
int a;
int b;
};
C_Class B{ //B继承了 A
C_Class B *B_this; //顺序很重要
void (*Foo)(C_Class B *Bthis); //虚函数
int a;
int b;
int c;
};
void B_F2(C_Class B *Bthis)
{
printf(It is B_Fun\n);
}
void A_Foo(C_Class A *Athis)
{
printf(It is A.a=%d\n,Athis-a);//或者这里
// exit(1);
// printf(纯虚 不允许执行\n);//或者这里
}
void B_Foo(C_Class B *Bthis)
{
printf(It is B.c=%d\n,Bthis-c);
}
void A_Creat(struct A* p)
{
p-Foo=A_Foo;
p-a=1;
p-b=2;
p-A_this=p;
}
void B_Creat(struct B* p)
{
p-Foo=B_Foo;
p-a=11;
p-b=12;
p-c=13;
p-B_this=p;
}
int main(int argc, char* argv[])
{
C_Class A *ma,a;
C_Class B *mb,b;
A_Creat(a);//实例化
B_Creat(b);
mb=b;
ma=a;
ma=(C_Class A*)mb;//引入多态指针
printf(%d\n,ma-a);//可惜的就是 函数变量没有 private
ma-Foo(ma);//多态
a.Foo(a);//不是多态了
B_F2(b);//成员函数,因为效率问题不使用函数指针
return 0;
}
输出结果:
11
It is B.c=13
It is A.a=1
It is B_Fun
2.类模拟解说:
我在网上看见过一篇文章讲述了类似的思想(据说 C++编程思想上有更加详细的解说,
可惜我没空看这个了,如果有知道的人说一说吧)。但是就象 C++之父说的:“C++和 C 是两种语
言”。所以不要被他们在语法上的类似就混淆使用,那样有可能会导致一些不可预料的事情发生。
其实我很同意这样的观点,本文的目的也不是想用 C 模拟 C++,用一个语言去模拟另外
一个语言是完全没有意义的。我的目的是想解决 C 语言中,整体框架结构过于分散、以及数据和
函数脱节的问题。
C语言的一大问题是结构松散,虽然现在好的大型程序都基本上按照一个功能一个文件的
设计方式,但是无法做到更小的颗粒化――原因就在于它的数据和函数的脱节。类和普通的函数
集合的最大区别就在于这里。类可以实例化,这样相同的函数就可以对应不同的实例化类的变量。
您可能关注的文档
- 2002005第二学期学生工作总结与今后一段时间的工作思路.PPT
- 2002年青岛海洋环境公报.DOC
- 2007年杭州江干区国民经济和社会发展统计公报.DOC
- 2008绿色创投方案评选活动华中地区推广会时间.PPT
- 201005浙江水利工程维修养护经费编制细则-浙江水利.DOC
- 2010-2011计算机系统维护项目-广州公共资源交易中心.DOC
- 2009精品课程申报涂料生产技术.PPT
- 2010新竹义民文化祭‘创意彩绘神猪’作品征选活动.DOC
- 2011—2012学丰职汽修组技能大赛方案-宁夏海原职业中学.DOC
- 2011公开课C静电的利用与防范定稿_2013091314283535902.PPT
文档评论(0)