C语言是没运算符重载的,C++进行了扩充。
C++比C语言多了面向对象(类),多了函数重写,运算符重载,实现了(函数重载跟运算符重载都属于编译器静态绑定了地址,所以是静态多态,而虚函数需要在运行期确定,是动态多态)。
如何实现C++跟C语言混合编程?extern "C",其修饰的代码段需要以C语言的方式进行编译链接,可以解决经过编译后得到的函数名不一致的问题
为啥会不一致?因为C++提供了函数重载、运算符重载。重载需要提供差异,C++会在编译阶段对函数的函数名进行重命名,重命名了才保证链接器能找到对应的符号。但是C语言不支持。所以一个重命名了一个不重名就出问题。
根据 C++ 标准编译后的函数名几乎都由原有函数名和各个参数的数据类型构成,而根据 C 语言标准编译后的函数名则仅有原函数名构成。
运算符重载的原则:
1.不是所有运算符都可以重载,比如sizeof
2.运算符重载之后不应该改变用法
3.作为数据结构类成员函数重载运算符的时候,要注意非静态成员函数在会默认在参数首位添加this指针,会导致如果要重载的运算符是二元运算符,那么只需要提供另一个运算对象参数,如果要重载的是一元运算符那就不需要参数了。
4.如果是全局范围对某个运算符进行重载,也就是说在定义重载函数的时候没有类名没有作用域,但是返回类型和参数类型都用到了某一个自定义的类,用到了其中的private成员变量,那就得将其声明为这个类的友元函数,
必要时需要重载赋值运算符=,以避免两个对象内部的指针指向同一片存储空间。
<<和>>是在 iostream 中被重载,才成为所谓的“流插入运算符”和“流提取运算符”的。
标签:函数,C++,C语言,运算符,编译,重载 From: https://www.cnblogs.com/synapse331/p/17664321.html