作者ACMTino (哈哈哈)
看板C_and_CPP
標題[問題] operator overloading
時間Tue Oct 20 01:55:03 2009
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)
推 QQ29:我看你一開始的例子 沒有reference存在阿? 10/20 02:13
→ QQ29:回傳用copy 妳宣告的也是一個物件=回傳 又copy一次 10/20 02:13
→ QQ29:你這不就已經是copy了!? 10/20 02:14
→ ACMTino:可是為什麼 List oList = oTest.GetList(); 和 oTest.Dump 10/20 02:22
→ ACMTino:內容一樣?? 10/20 02:22
→ ACMTino:應該只有 oList 有 orz 而已.. 10/20 02:23
推 littleshan:是啊 我測的結果的確是只有 oList 有 orz 10/20 10:08