如何在C语言中使用面向对象的技术(c++免谈)如果可以,我需要相关书籍!

我在阅读linux开源的原代码时,经常遇见使用面向对象的编程方式编写的C代码。不知道有没有高人遇见过,或者有相关的编程技术文档,发给小弟,不胜感激!相关代码如:struc... 我在阅读linux开源的原代码时,经常遇见使用面向对象的编程方式编写的C代码。不知道有没有高人遇见过,或者有相关的编程技术文档,发给小弟,不胜感激!
相关代码如:
struct fuse_operations callback_oper = {
.mknod = callback_mknod,
.symlink = callback_symlink,
.unlink = callback_unlink,
.rmdir = callback_rmdir,
.rename = callback_rename,
.link = callback_link,
.chmod = callback_chmod,
.chown = callback_chown,
.utime = callback_utime,
.getattr = callback_getattr,
.readlink = callback_readlink,
.readdir = callback_readdir,
.mkdir = callback_mkdir,
.truncate = callback_truncate,
.open = callback_open,
.read = callback_read,
.write = callback_write,
.statfs = callback_statfs,
.release = callback_release,
.fsync = callback_fsync,
.access = callback_access,
.create = callback_create,
.setxattr = callback_setxattr,
.getxattr = callback_getxattr,
.listxattr = callback_listxattr,
.removexattr= callback_removexattr

};

我不知道如何学得这种设计的思想!
struct ipmi_cmd {
int (*func)(struct ipmi_intf * intf, int argc, char ** argv);
const char * name;
const char * desc;
};
struct ipmi_cmd ipmitool_cmd_list[] = {
{ ipmi_raw_main, "raw", "Send a RAW IPMI request and print response" },
{ ipmi_rawi2c_main, "i2c", "Send an I2C Master Write-Read command and print response" },
{ ipmi_rawspd_main, "spd", "Print SPD info from remote I2C device" },
{ ipmi_lanp_main, "lan", "Configure LAN Channels" },
{ ipmi_chassis_main, "chassis", "Get chassis status and set power state" },
{ ipmi_power_main, "power", "Shortcut to chassis power commands" },
{ ipmi_event_main, "event", "Send pre-defined events to MC" },
}

像c++中的重载,在c中它是类似这样设计。我所见到的代码大量利用这样的设计方式及回调函数的技术,这种技术让我又佩服又摸不透!

重申:搞理论的就别掺和了,理论我在大学时见多了
展开
 我来答
xinlan199023
2013-10-07
知道答主
回答量:1
采纳率:0%
帮助的人:2.4万
展开全部
C 可以写出面向对象风格的程序,linux源码里面都有很多类似的用法,但是你可能会觉得很别扭,因为这样的实现都需要用到回调函数。

所以你应该选择合适的工具,需要面向对象的时候,还是请选择C++吧。先找一本C++的教材看看。
追问
是的,内核里是用面向对象的思想!其实这个问题我已经可以解决了。阅读代码的时候先了解逻辑,再找准一条线,从一条线下来屡清楚代码。以前见识太少经验不足。谢了!
hanzhuhua
2012-08-31 · TA获得超过686个赞
知道小有建树答主
回答量:351
采纳率:85%
帮助的人:69.2万
展开全部
想学面向对象编程就学面向对象的语言,C本身就是面对过程的,就算是编写出面向对象的样式,也没有面向对象的特性,为何多此一举?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
curtyixiu
2012-08-31 · TA获得超过207个赞
知道小有建树答主
回答量:117
采纳率:0%
帮助的人:129万
展开全部
c语言是面向过程的语言,上面的代码使用的是结构体,c++语言是基于对象的(不是纯面向对象的,就叫基于对象的)。本身结构体在c++中就类似于类,也就是说与类的使用有那么一点接近,但是之间还是有很大区别的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0fadc27bf
2012-09-01 · TA获得超过347个赞
知道答主
回答量:79
采纳率:0%
帮助的人:53.8万
展开全部
其实就是一个结构体中既有一般的数据成员,比如 int a; char b;等等,(这些就好比C++ 类中的数据成员),然后还有一些函数指针,(这就好比类中 成员函数一样)。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友6bf1bee
2012-09-06 · TA获得超过239个赞
知道小有建树答主
回答量:244
采纳率:0%
帮助的人:95.7万
展开全部
。。。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式