zoukankan      html  css  js  c++  java
  • 操作符重载引入

    运算符重载前:
    #include <iostream>
    #include <string.h>
    #pragma warning(disable:4996)
    using namespace std;
    class MyString{
    public :
        char *str;
        MyString(){
            cout << "无参构造地址:"<<&str << endl;
            str = new char[256];
        }
        MyString(const MyString &mystr){//复制构造
            str = new char[256];
            memset(str, 0, 256);
            strcpy(str, mystr.str);
        }
    
        ~MyString(){
            cout << "析构" <<&str<< endl;
            delete[]str;
        }
    };
    int main(){
        MyString ms1;
        strcpy(ms1.str, "letben");
        /*
        问题代码:
        MyString ms2;
        ms2 = ms1;
        cout << ms1.str << endl;
        cout << ms2.str << endl;
        */
        //调用了复制构造函数,所以没有出问题。所以=方式与复制构造函数上还是有本质差别的。
        MyString ms3(ms1);
        cout << ms1.str << endl;
        cout << ms3.str << endl;
        MyString ms4(ms1);
        cout << ms1.str << endl;
        cout << ms4.str << endl;
        //可是细细想来,ms2 = ms1  应该是一个靠谱的写法。所以我们要是可以把这种运算也做成是,复制构造的样子就好了。可是怎么才能让 这个= 不变成浅拷贝,而变成我们所希望它的样子呢?
        //这就引出了,运算符的重载。让“=”执行我们的功能。
        system("pause");
        return 0;
    }

    运算符重载之后的代码:

    #include <iostream>
    #include <string.h>
    #pragma warning(disable:4996)
    using namespace std;
    class MyString{
    public :
        char *str;
        MyString(){
            cout << "无参构造地址:"<<&str << endl;
            str = new char[256];
        }
        MyString(const MyString &mystr){//复制构造
            str = new char[256];
            memset(str, 0, 256);
            strcpy(str, mystr.str);
        }
        ~MyString(){
            cout << "析构" <<&str<< endl;
            delete[]str;
        }
        /* 重载“=”运算符*/
        void operator =(const MyString &mystr){
            str = new char[256];
            memset(str, 0, 256);
            strcpy(str, mystr.str);
        }
    };
    int main(){
        MyString ms1;
        strcpy(ms1.str, "letben");
        /*
        问题代码:
        MyString ms2;
        ms2 = ms1;
        cout << ms1.str << endl;
        cout << ms2.str << endl;
        */
        //调用了复制构造函数,所以没有出问题。所以=方式与复制构造函数上还是有本质差别的。
        MyString ms3(ms1);
        cout << ms1.str << endl;
        cout << ms3.str << endl;
        MyString ms4(ms1);
        cout << ms1.str << endl;
        cout << ms4.str << endl;
        //可是细细想来,ms2 = ms1  应该是一个靠谱的写法。所以我们要是可以把这种运算也做成是,复制构造的样子就好了。可是怎么才能让 这个= 不变成浅拷贝,而变成我们所希望它的样子呢?
        //这就引出了,运算符的重载。让“=”执行我们的功能。
        MyString ms2;
        ms2 = ms1;
        system("pause");
        return 0;
    }
  • 相关阅读:
    python --函数
    Python基本数据类型
    初识python
    【 D3.js 高级系列 — 8.0 】 标线
    【 D3.js 高级系列 — 7.0 】 标注地点
    Azure SQL 数据库最新版本现已提供预览版
    Azure SQL 数据库新服务级别现已正式发布
    聚焦 SQL 数据库活动异地复制
    Azure SQL 数据库:服务级别与性能问答
    Azure SQL 数据库:新服务级别问答
  • 原文地址:https://www.cnblogs.com/letben/p/5301916.html
Copyright © 2011-2022 走看看