[問題] operator overloading
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
10/20 02:13, 1F
→
10/20 02:13, , 2F
10/20 02:13, 2F
→
10/20 02:14, , 3F
10/20 02:14, 3F
→
10/20 02:22, , 4F
10/20 02:22, 4F
→
10/20 02:22, , 5F
10/20 02:22, 5F
→
10/20 02:23, , 6F
10/20 02:23, 6F
推
10/20 10:08, , 7F
10/20 10:08, 7F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 4 之 6 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章