网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
06月12日漏签0天
c语言吧 关注:798,810贴子:4,356,328
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 3回复贴,共1页
<<返回c语言吧
>0< 加载中...

c语言的struct能封装函数吗

  • 只看楼主
  • 收藏

  • 回复
  • 十年梦幻
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
根据我浅薄的理解,面向对象主要特征是封装数据(字段)和函数(方法,行为)。
c语言的struct能把数据封进去,基本类型或者struct都行。
以前没学过函数指针这个感念(指针部分很弱),看上去好像是一个指向函数的指针,
那么能不能把这种指针放到struct里面,那么是不是相当于把函数封装到struct里面了呢?这和cpp里面struct比较起来,似乎区别不大,只是cpp里面的话,不同的struct可以有相同名字的函数,dog.getch(),cat.getch()这样,若是c语言,那么只能叫做dog_getch(),cat_getch().
不知道我的理解对不对?
闲逛的时候不知道哪里看到有牛x写书用c语言实现面向对象的思想,是不是大概就是这样呢?(虽然这么做明显没有cpp方便)


  • swgr
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你没有从编译的角度理解成员函数的原理,也可以说明你对C++的类还不熟
事实上,每一个成员函数的第一个参数都是一个隐藏掉的this,
也就是说,从编译的角度,下面的程序,
Animal dog,cat;
dog.eat(bone)
cat.eat(mouse)
会被编译成
eat(dog,bone)
eat(cat,mouse)
所以,说白了,看起来是对象执行不同的行为,其实你不妨看成是动作相同而执行者不同。
当然你在C里也可以类似的做:
typedef struct {
   int quality;
} Food;
typedef struct {
   int hungry;
} Animal;
void eat(Animal* eater,Food food) {
eater->hungry-=food.quality;
}


2025-06-12 09:06:50
广告
  • 十年梦幻
  • 低能力者
    5
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
感谢回答。
我的理解:也就是说,c语言也可以oo,只是cpp更加方便。
对吗?


  • gagaffer
  • 毛蛋
    1
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
C++无非多了一个虚指针来着用来实现多态的机制
类和结构没多大区别,无非就是多了一层指针而已
反汇编看还是很能说明问题


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 3回复贴,共1页
<<返回c语言吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示