我的这个重载操作符函数为什么如何实现函数重载不了字符连接每次连接都只能显示一个字母哪位大神指点一下

// 34用重载输入运算符函数如何实现函数重载字符串的输入
 
 
//创建一个空的str变量
 //这里因为我们构造一个新对象并且用旧对象来为它赋值很明显,不会修改旧对象的值所以旧對象rs在调用operator[]const函数的时候,不用将指定字符串的地址返回只需要要按值返回这个字符即可
 //第二次重载的operator[]运算符函数,按值返回的一个字符同时在函数体前面加了一个const
 //表示该函数可以操作const对象,也就是rs
 //这样由于2个同名的函数它的类型不同,一个可操作const对象一个不可以,這样就可以做到了对函数的重载
}

使用友元函数如何实现函数重载┅元运算符的重载
如何实现函数重载一元运算符的前置重载 即前置++a;

一元运算符重载如何实现函数重载一元运算符的后置重载即 a++;
后置和前置嘚区别就是后置的多了一个占位符 剩下的就是C++编译器自己调用了不用C++程序员管理管理

重载左移操作符 << 如何实现函数重载链式编程

}

在我们中国的文化中一个词可能是有多种含义,在这种情况下就可以通过上下文来判断这个词到底是什么意思在这里我们就可以理解为这个词被重载了。
例:又是晴朗的而又美好的一天可是小明的妈妈却让小明去打扫卫生,不打扫完不能出去玩但是恰好小明这时候特别想出去和朋友一起打篮球,當她妈妈给他让他去打扫卫生时小明顺口来了一句“ 我去 ”。那么请问小明到底是去还是不去其实这只是个玩笑而已,不过它却很像峩们的函数重载下面就让我们一起来看什么是函数重载吧!

    在我们C++中,允许我们在同一作用域中声明同名的函数这些同名的函数的形參列表不同就是我们的函数重载。
    形参列表(形参变量个数不同形参变量类型不同,形参变量顺序不同)

注:在这里我们要注意一点函数的返回值不同不构成函数重载

形如上面两种写法的函数就是函数的重载,第一个函数是用来计算两个整数相加的第二个函数是用来計算浮点数相加的,两个函数的形参类型不同所以这就构成了 add()函数的重载

    1、试想如果没有函数重载机制,如在C中假如我们要打印┅些数据,你必须要这样去做:为这个print函数取不同的名字如print_int、print_string。这里还只是两个的情况如果是很多个的话,就需要为如何实现函数重載同一个功能的函数取很多个名字如加入打印long型、char*、各种类型的数组等等。这样做很不友好!
    2、类的构造函数跟类名相同也就是说:構造函数都同名。如果没有函数重载机制要想实例化不同的对象,那是相当的麻烦!
    3、操作符重载本质上就是函数重载,它大大丰富叻已有操作符的含义方便使用,如+可用于连接字符串等!

既然我们知道了什么是函数重载那么C++支持函数重载,那么C语言为什么不支持函数重载呢接下来就让我们一起去探究一下函数的底层调用过程。

通过我们在写好一个.c/.cpp文件的时候点击开始运行,那么它就能运行起來运行一个程序就这一步就好了吗?其实当然不是下面让我们来看看我们C/C++中我们的程序到底是如何运行起来的。大致可以分为4个阶段如下:

  1. 预处理阶段(在预处理阶段,会进行宏替换条件编译,头文件展开去店掉注释)
  2. 编译阶段(在编译阶段,首先会进行语法语義检错无误后要将我们写好的C文件编译成汇编文件)
  3. 汇编阶段(在汇编阶段就是要将我们的汇编文件转换成可执行的机器指令)
  4. 链接阶段(在链接阶段就是要把我们的所有的目标文件以及我们所依赖的库文件链接到一起生成可执行程序)
    以上就是我们一个程序的执行过程,我们可以看到在链接文件的时候,假如我们写了一个重载函数add,那么我们的重载函数在我们的C++底层中是如何处理的很容易想到,在编譯过程中编译器会将我们的代码编译成汇编文件,这里其实就存在这一种重命名机制我们把它就叫做名字修饰。

1、在C语言中编译器茬编译过程会将我们的函数重命名,具体的方法就是在我们的函数名前加上“_“修饰符通过这种方式就可以在我们的符号表种查找到了,但是假如有两个相同的函数编译之后进行相同的重命名,在符号表中生成的函数名一样那么就无法区分到底是哪个函数了,所以这吔就是我们的C语言为什么不支持函数重载的原因了
2、在C++中,既然支持函数重载那么它肯定对C语言在这方面进行了优化,具体的方法就昰在我们的函数名后面加上参数然后生成我们符号表中的函数名称那么这样一来,就很容易理解了为什么C++可以支持函数重载了,就是洇为函数重载底层的原理造成的就是由于重载函数在符号表中生成的函数名称不一样,这样就能区分到底是哪个函数了这样一来编译僦能通过了。

  • C++能否按照C语言的方式来编译文件
    答案是肯定可以的只需要在我们的函数前加上 extern ”C“ 即可。例如
}

我要回帖

更多关于 如何实现函数重载 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信