[問題] operator overloading

看板C_and_CPP (C/C++)作者 (哈哈哈)時間16年前 (2009/10/20 01:55), 編輯推噓2(205)
留言7則, 3人參與, 最新討論串4/6 (看更多)
List Test::GetList() { return m_oList; } Test oTest; List oList = oTest.GetList(); 這樣子做還是會取得 m_oList, 等於 oList 是 m_oList 的別名 那修改 oList 就會改到 m_oList 請問要怎麼做才能避免修改到 m_oList, 或是能夠 overloading operator 讓 GetList() 回傳 copy value 謝謝 -- #include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <vector> using namespace std; #define MAX_NAME_LENGTH 256 typedef struct _Ele { char sName[MAX_NAME_LENGTH]; } Ele; class List { public: List() {} ~List() {} // Ele Get(int index) { return m_vEle[index]; } // bool Add(const char *sName) { Ele Ele; strcpy(Ele.sName, sName); m_vEle.push_back(Ele); } int GetSize() { return (int)m_vEle.size(); } // void Clear() { m_vEle.clear(); } List operator=(const List &rhs) { printf("....\n"); if(this == &rhs) return *this; this->Clear(); return *this; } // private: vector<Ele> m_vEle; }; class Test { public: // Test() { m_oList.Add("XD"); } ~Test() {} // List GetList() { return m_oList; } void Dump() { for(int i=0; i<m_oList.GetSize(); ++i) { printf("%s\n", m_oList.Get(i).sName); } } private: List m_oList; }; int main() { Test oTest; // printf("orz..dd..\n"); List oList = oTest.GetList(); oList.Add("orz"); for(int i=0; i<oList.GetSize(); ++i) { printf("%s\n", oList.Get(i).sName); } oTest.Dump(); // return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.110.160.71 ※ 編輯: ACMTino 來自: 123.110.160.71 (10/20 01:55)

10/20 02:13, , 1F
我看你一開始的例子 沒有reference存在阿?
10/20 02:13, 1F

10/20 02:13, , 2F
回傳用copy 妳宣告的也是一個物件=回傳 又copy一次
10/20 02:13, 2F

10/20 02:14, , 3F
你這不就已經是copy了!?
10/20 02:14, 3F

10/20 02:22, , 4F
可是為什麼 List oList = oTest.GetList(); 和 oTest.Dump
10/20 02:22, 4F

10/20 02:22, , 5F
內容一樣??
10/20 02:22, 5F

10/20 02:23, , 6F
應該只有 oList 有 orz 而已..
10/20 02:23, 6F

10/20 10:08, , 7F
是啊 我測的結果的確是只有 oList 有 orz
10/20 10:08, 7F
文章代碼(AID): #1AtAVwKd (C_and_CPP)
文章代碼(AID): #1AtAVwKd (C_and_CPP)