MFC CString “=”运算符重载了,这要怎么改

MFC CString “=”运算符重载了,这要怎么改,这个要怎么改,显示运算符重载了

img

str = str + _T("你的字符串");

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/69565
  • 你也可以参考下这篇文章:MFC-CString
  • 以下回答来自chatgpt:

    对于问题中提到的修改CString类的“=”运算符重载,需要在CString类外部重新定义“=”运算符以更改其默认行为。具体步骤如下:

    1. 在代码中定义一个类来保存字符串和其长度,以便更好地管理字符串。例如:
    class MyString{
    public:
        MyString(const char* str)
        {
            m_len = strlen(str);
            m_str = new char[m_len+1];
            strcpy(m_str, str);
        }
    
        MyString(const MyString& myStr)
        {   
            m_len = myStr.m_len;
            m_str = new char[m_len+1];
            strcpy(m_str, myStr.m_str);
        }
    
        ~MyString()
        {
            delete[] m_str;
            m_str = NULL;
        }
    
        char* c_str(){ return m_str;}
        int length(){ return m_len;}
    
        MyString& operator=(const MyString& myStr)
        {
            if(this != &myStr)
            {
                delete[] m_str;
                m_len = myStr.m_len;
                m_str = new char[m_len+1];
                strcpy(m_str, myStr.m_str);
            }
        }
    
    private:
        char* m_str;
        int m_len;
    };
    
    1. 在代码中重载“=”运算符来使用我们自己定义的MyString类。例如:
    class CMyString : public CString{
    public:
        CMyString(const char* str):CString(str){};
        CMyString(const CString& cstr):CString(cstr){};
    
        CMyString& operator=(const CMyString& myStr)
        {
            *this = MyString(myStr).c_str();
            return *this;
        }
    };
    
    1. 在主函数中测试代码,输出结果。例如:
    CMyString str("Hello");
    CMyString str2("World");
    
    str = str2;
    
    std::cout << str.GetString() << std::endl;
    

    这将输出“World”。

    如果修改后还是没有生效,可以考虑清除注册表的缓存,具体步骤见参考资料中的段落2。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

L"字符串" 或者_T("字符串")