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

    // 操作符重载.cpp : 定义控制台应用程序的入口点。
    //

    #include "stdafx.h"
    #include <iostream>
    using namespace std;

    class MyClass
    {
    private:
    int m_iNum;
    char m_szText[128];
    public:
    MyClass()
    {
    m_iNum = 0;
    memset(m_szText, 0, 128);
    cout<<"1";
    }
    MyClass(const MyClass &c)
    {
    m_iNum = c.m_iNum;
    memset(m_szText, 0, 128);
    strcpy(m_szText, c.m_szText);
    cout<<"2";
    }
    MyClass(int iNum, char *szText)
    {
    m_iNum = iNum;
    memset(m_szText, 0, 128);
    strcpy(m_szText, szText);
    cout<<"3";
    }
    ~MyClass()
    {
    cout<<"4";
    }

    const MyClass &operator=(const MyClass &second)
    {
    if (this==&second)
    return *this;
    m_iNum = second.m_iNum;
    strcpy(m_szText, second.m_szText);
    cout<<"5";
    return *this;
    }

    const MyClass operator+(const MyClass &second)
    {
    MyClass tmp(*this);
    tmp.m_iNum += second.m_iNum;
    strcat(tmp.m_szText, second.m_szText);
    cout<<"6";
    return tmp;
    }
    };
    int _tmain(int argc, _TCHAR* argv[])
    {
    {
    MyClass c1(1, "abc");
    MyClass c2(2, "def");
    MyClass c3 = c1 + c2;
    MyClass c4;
    c4 = c1;
    }
    // c1.m_iNum=1;c1.m_szText="abc"
    // c2.m_iNum=2;c2.m_szText="def"
    // c3.m_iNum=3;c3.m_szText="abcdef"
    // c4.m_iNum=1;c4.m_szText="abc"
    // 屏幕输出:332624154444
    // 注:MyClass c3 = c1 + c2; 等价于 MyClass c3(c1 + c2);

    // 若将const MyClass operator+(const MyClass &second) 改成 const MyClass &operator+(const MyClass &second)
    // 则,屏幕输出:33264215444,且c3.m_szText为乱码。若在BCB中,则提示:[BCC32 Error] File1.cpp(60): E2363 Attempting to return a reference to local variable 'tmp'

    return 0;
    }
  • 相关阅读:
    [SCOI2010] 生成字符串
    [NOIp2010] 机器翻译
    [CF792E] Colored Balls
    JS6-函数1
    JS6-字符串
    JS6-函数
    JS
    Bootstrap
    JQuery 自己的理解
    JQuery
  • 原文地址:https://www.cnblogs.com/plus/p/2408824.html
Copyright © 2011-2022 走看看