浅谈C++中用友元函数的方法实现复合运算符(+=等)的重载方法

来源:互联网 发布:windows控制台程序作用 编辑:程序博客网 时间:2024/05/19 05:38

今天偶然翻开就别的C++教材,看到运算符重载部分。恰逢手头上有几道关于运算符重载的题目,于是生硬的敲起代码来,许久未写代码,手不灵活了。


在写到重载复合运算符的题目时,用成员函数的方法比较容易实现。但是题目中还要求使用友元函数的方法实现,于是就卡在这里了。调试了数次后未果,于是上网翻阅资料,发现网上关于使用友元函数的方法实现复合运算符的重载内容甚少。于是乎,便自己鼓捣起来,终于在晚饭前有了结果。下面分享一下我写的代码,小白初次写博客,望大牛们多海涵,多知道。谢过!


相关题目:

定义一个复数类,重载“-=”运算符,使这个运算符能直接完成复数的“-=”运算。分别用成员函数与友元函数编写运算符重载函数。在主函数中定义复数对象c1(10,20)、c2(15,30),进行c2-=c1的复数运算,并输出c1c2的复数值。


我的代码如下:

#include <iostream>using namespace std;class Complex{private:    double r,i;public:    Complex(double R, double I):r(R),i(I){}    ~Complex(){}//    Complex operator -=(Complex b);    void disp();    friend Complex& operator -=(Complex& a, const Complex& b);};/*Complex Complex::operator -=(Complex b)         //成员函数实现重载{    r -= b.r;    i -= b.i;    return *this;}*/void Complex::disp(){    cout<<this->r;    if(i>0) cout<<"+";    if(i != 0) cout<<i<<"i"<<endl;}Complex& operator -=(Complex& a, const Complex& b)          //友元函数实现重载{    a.r -= b.r;    a.i -= b.i;    return a;}int main(){    Complex c1(10,20),c2(15,30);    c2 -= c1;    c1.disp();    c2.disp();    return 0;}


相关题目:

定义描述字符串的类String,编写字符串运算符“+=”的重载函数,使运算符“+=”用于两个字符串联接操作,即用str1+=str2实现字符串函数strcat(str1,str2)的操作功能。要求分别用成员函数与友元函数编写运算符重载函数。在主函数中定义字符串对象 s1("software and ")s2("hardware"),进行s1+=s2的字符串联接,并输出s1、s2的值。


我的代码如下:

#include <iostream>#include <string>using namespace std;class String{private:    char s[256];public:    String(const char* str){strcpy(this->s,str);}    ~String(){}//    String& operator +=(const String& str);                       //使用成员函数的方法    friend String& operator +=(String& st, const String& str);      //使用友元函数的方法    void disp();};/*String& String::operator +=(const String& str)                       //使用成员函数的方法{    strcat(this->s,str.s);    return *this;}*/String& operator +=(String& st, const String& str)              //使用友元函数的方法{    strcat(st.s,str.s);    return st;}void String::disp(){    cout<<this->s<<endl;}
int main(){    String s1("software and "),s2("hardware");    s1 += s2;    s1.disp();    s2.disp();    return 0;}


小生不才,献丑了。

0 0
原创粉丝点击