非常满意意 2022-05-31 17:31 采纳率: 90.9%
浏览 53
已结题

C++改造以下函数以友元函数输出

以友元函数的方式重载流插入运算符“<<“:实现字符串的输出

#include <iostream>
using namespace std;
const int maxsize = 256;
class mystring
{
    char str[maxsize];
    int len;
public:
    mystring()
    {
        len = 0;
        str[0] = '\0';
        cout << "缺省构造函数" << endl;
    }
    mystring(char* s)
    {
        int i = 0;
        for (i = 0; s[i] != '\0'; i++)
        {
            str[i] = s[i];
        }
        len = i;
        cout << "构造函数(用C风格字符串初始化)" << endl;
    }
    mystring(mystring& ms)
    {
        len = ms.len;
        for (int i = 0; i < len; i++)
        {
            str[i] = ms.str[i];
        }
        cout << "拷贝构造函数" << endl;
    }
    ~mystring()
    {
        cout << "析构函数" << endl;
    }
    void show()
    {
        for (int i = 0; i < len; i++)
        {
            cout << str[i];
        }
        cout << '\n';
    }
};
int main()
{
    char str[21] = "Hello";
    mystring A(str);
    mystring B ="C++";
    mystring C;
    C = A;
    cout << C;
    C = A + B;
    cout << C;
    return 0;
}
  • 写回答

2条回答 默认 最新

  • qfl_sdu 2022-05-31 18:59
    关注

    mystring B ="C++";这么写不对啊。代码中有一些错误,也一起改掉了,代码如下:

    #include <iostream>
    using namespace std;
    const int maxsize = 256;
    class mystring
    {
        char str[maxsize];
        int len;
    public:
        mystring()
        {
            len = 0;
            str[0] = '\0';
            cout << "缺省构造函数" << endl;
        }
        mystring(const char* s)
        {
            int i = 0;
            for (i = 0; s[i] != '\0'; i++)
            {
                str[i] = s[i];
            }
            str[i] = 0;
            len = i;
            cout << "构造函数(用C风格字符串初始化)" << endl;
        }
        mystring(mystring& ms)
        {
            len = ms.len;
            for (int i = 0; i < len; i++)
            {
                str[i] = ms.str[i];
            }
            cout << "拷贝构造函数" << endl;
        }
        ~mystring()
        {
            cout << "析构函数" << endl;
        }
        /*void show()
        {
            for (int i = 0; i < len; i++)
            {
                cout << str[i];
            }
            cout << '\n';
        }*/
    
        friend ostream& operator << (ostream& os,mystring & s);
        friend mystring operator +(mystring& s1, mystring& s2);
        
        
        
    };
    
    ostream& operator << (ostream& os, mystring& s)
    {
        int i = 0;
        for (; i < s.len && s.str[i] != '\0'; i++)
            cout << (char)s.str[i];
        return os;
    }
    mystring operator +(mystring& s1, mystring& s2)
    {
        mystring s3;
        int i = 0;
        int k = 0;
        while (s1.str[i])
        {
            s3.str[k] = s1.str[i];
            i++;
            k++;
        }
        i = 0;
        while (s2.str[i])
        {
            s3.str[k] = s2.str[i];
            i++;
            k++;
        }
        s3.str[k] = 0;
        s3.len = k;
        return s3;
    }
    
    int main()
    {
        char str[21] = "Hello";
        mystring A(str);
        mystring B("C++");
        mystring C;
        C = A;
        cout << C;
        C = A + B;
        cout << C;
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月8日
  • 已采纳回答 5月31日
  • 赞助了问题酬金5元 5月31日
  • 创建了问题 5月31日

悬赏问题

  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭