作者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)
1F:推 QQ29:我看你一开始的例子 没有reference存在阿? 10/20 02:13
2F:→ QQ29:回传用copy 你宣告的也是一个物件=回传 又copy一次 10/20 02:13
3F:→ QQ29:你这不就已经是copy了!? 10/20 02:14
4F:→ ACMTino:可是为什麽 List oList = oTest.GetList(); 和 oTest.Dump 10/20 02:22
5F:→ ACMTino:内容一样?? 10/20 02:22
6F:→ ACMTino:应该只有 oList 有 orz 而已.. 10/20 02:23
7F:推 littleshan:是啊 我测的结果的确是只有 oList 有 orz 10/20 10:08