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

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


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


相关题目:

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


我的代码如下:

#include 

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<r;
    if(i>0) cout<<"+";
    if(i != 0) cout<


相关题目:

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


我的代码如下:

#include 
#include 

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<s<

int main()
{
    String s1("software and "),s2("hardware");
    s1 += s2;

    s1.disp();
    s2.disp();

    return 0;
}


小生不才,献丑了。

你可能感兴趣的:(C++)