C语言如何支持C++重载?

鲁维娟 2018-12-11 05:24:40
那么问题来了,为什么C++支持函数重载,而C语言不支持呢?
从代码的编译到运行,在VC6.0或VS这种编译器下,它是系统直接完成了翻译与链接,直接生成了运行结果。
编译器内部完成了翻译部分:
1.预处理
   1)头文件展开
   2)宏的替换
   3)去注释
   4)条件编译
2.编译过程:将高级语言转为汇编语言
3.汇编过程:汇编语言转为二进制程序
链接部分:所引用的数据链接进来
比如一个函数的声明如下:
void  function(int x,int y);
...全文
156 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2018-12-12
  • 打赏
  • 举报
回复
面向对象只是一种编程思想。
再抽象的编程语言,最后不都变成汇编代码了吗?我们完全可以说汇编语言是面向对象、脚本化、动态化、泛函化、并行化、分布化的语言。
zarelaky 2018-12-12
  • 打赏
  • 举报
回复
c语言可以使用结构体和函数指针方式来做,但在使用场景中,因为没有动态类型识别,和访问控制(public,protected,private)机制,注意类型匹配,数据成员和函数指针的管理
struct base {
int data_member;
void (*show)(struct base* b);
};
void base_show( struct base* b) {
printf("base show\n");
}
void base_init(struct base* base){
base->show = base_show;
base->data_member = 1;
}

struct subclass{
struct base base;
void (*base_show)();
};
void subclass_show(struct base* b) {
struct subclass* sub = (struct base*)b;
sub->base_show(b); // call base_show(base);
print("subclass show called\n");
}

void subclass_init(struct subclass* sub) {
base_init(& sub->base);
subclass->base_show = base->show;
base->show = subclass_show;
}

/// test code
struct subclass sub;
subclass_init(&sub);

struct base* b = (struct base*)⊂
b->show(b);







AlbertS 2018-12-11
  • 打赏
  • 举报
回复
C语言没有类啊,勉强可以用struct代替类型定义,但是没有虚函数表,无法像C++一样多态重载啊

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧