컴공 일기259
String 처리에 대한 객체 예제를 쭉 작성해보고 있습니다.
보잘 것 없지만 지원할 만한 것은 다 지원되는 듯 합니다… 구현되지 않은 기능들이 아직 많지만요.
이동시맨틱에, 딥 카피에, 각종 사칙 연산…
직관적인 편의성을 제공하는 객체로 변모해가는 중..
#pragma once
#include <iostream>
using namespace std;
class CMystring
{
public:
CMystring();
~CMystring();
//멤버 변수에 포인터가 있으므로 Deep Copy를 반드시 지원해야 한다.
CMystring(const CMystring&);
explicit CMystring(const char* pszData);
CMystring(CMystring&&) noexcept;
const char* getData() const;
void setData(const char*);
const size_t getLength() const;
CMystring& operator=(const CMystring& rhs);
CMystring& operator=(CMystring&& rhs) noexcept;
CMystring operator+(const CMystring& rhs);
size_t append(const char* param);
operator const char*(void) const;
private:
char*m_pszData = nullptr;
size_t length = 0;
};
CMystring::CMystring()
{
cout << "CMystring()" << endl;
}
//Deep Copy
CMystring::CMystring(const CMystring& rhs)
{
setData(rhs.m_pszData);
}
CMystring::CMystring(const char* pszData)
{
cout << "CMystring(const char*)" << endl;
setData(pszData);
}
CMystring::CMystring(CMystring&& rhs)
{
cout << "CMystring(CMystirng&&)" << endl;
delete m_pszData;
m_pszData = rhs.m_pszData; //shallow copy
this->length = rhs.length;
rhs.m_pszData = nullptr; //댕글링 포인터로 만들어준다.
}
CMystring::~CMystring()
{
cout << "~CMystring()" << endl;
delete[] m_pszData;
}
CMystring& CMystring::operator=(const CMystring& rhs)
{
this->setData(rhs.m_pszData);
return *this;
}
CMystring& CMystring::operator=(CMystring&& rhs)
{
cout << "opeartor=(CMystring&&)" << endl;
delete m_pszData;
m_pszData = rhs.m_pszData;
this->length = rhs.length;
rhs.m_pszData = nullptr;
return *this;
}
CMystring::operator const char*(void) const
{
return m_pszData;
}
const char* CMystring::getData() const
{
return m_pszData;
}
void CMystring::setData(const char* pParam)
{
//setData()가 여러번 호출될 경우, m_pszData가 null이 아닐 수도 있다.
if(m_pszData != nullptr)
delete[] m_pszData;
size_t length = strlen(pParam);
m_pszData = new char[length + 1];
this->length = length;
strcpy(m_pszData, pParam);
}
CMystring CMystring::operator+(const CMystring& rhs)
{
CMystring retVal(*this);
retVal.append(rhs.getData());
return retVal;
}
size_t CMystring::append(const char* param)
{
if(param == nullptr) return -1;
if(m_pszData == nullptr)
{
this->setData(param);
return this->length;
}
size_t lenAppend = strlen(param);
char* result = new char[length + lenAppend + 1];
strncpy(result, m_pszData, length+1);
result[length] = '\0';
strncat(result, param, lenAppend);
delete[] m_pszData;
m_pszData = result;
length += lenAppend;
return this->length;
}
const size_t CMystring::getLength() const
{
return this->length;
}
CMystring operator+(const char* pLeft, const CMystring& rhs)
{
CMystring result(pLeft);
result.append(rhs.getData());
return result;
}
0 XDK (+0)
유익한 글을 읽었다면 작성자에게 XDK를 선물하세요.
-
Ex) 논리,먈싸움,관계우위
-
집이 좀 어려워서 11만원은 너무 부담이라 그런데 고속만 사서 봐도 될까요?
-
홍대미대 0
과잠 한국어로 딱 홍익미대 써놓은거 예쁜데 내년에 홍떨하면 저런식으로 과잠 따라하고싶다 욕먹을듯,,
-
단국대, 원광대 인원 감소가 진짜 뼈아프네..
-
아 할게없네 3
뭔가 공부를 하자니 안땡기고 공부를 안하자니 할게없는 기현상이 아 블루아카 한번...
-
'ㅋㅋㅋㅋㅋㅋㅋ'보유하신 분 있나요 ???????????????? 뭐 이런 느낌...
-
에피 메일 6
정보 누락되서 다시 보냈는데 괜찮나요?
-
그냥 요즘 다 뜯어고치고 싶음ㅠㅠ 코랑 양악도 하고 시픔… 근데 ㅈㄴ 무서워서...
-
한완기 질문 1
테마편이랑 평수능이랑 뭔차인가요? 그리고 94년도부터 전문항 수록이라는데 진짜 전문항 다실려있나요?
-
스테로이드 고려해도 ㅈㄴ 피땀흘려 만든 근육인데 ㅠㅠ 같은 방 수감자들로...
-
주말에 안하면 월요일에 올려주나…..????
-
내일은 늦잠자야지.... 머리는 따끈하고 발은 차갑고 심장박동도 개이상하고 목에선 피맛남
-
전과 관련해서 여쭈어보고 싶은게 있어서요...! 쪽지 가능하시다면 댓글 달아주시면...
-
28번-믿찍2 29번-69 30번 답이 25였으므로 한번 비틀어서 29번을...
-
와........
-
뭘 해도 도파민이 안 나옴
-
나군에 뭐적을지 고민인데 어디가 좋나요?
-
그렇게 됐습니다 ㅎㅎ사실 좀 됐는데 확실히 진학하기로 마음 먹은 게 최근이라 진로든...
-
수엽료는 아닐 것 같고.. 컨텐츠비?
-
궁금
-
솔직히 서울공화국이라서도 큰듯
-
진학사 딱 보면 의반 고려 안하고 의반이 박살낸 백분위로 최종컷 짜게잡고 칸수 적게...
-
아 삶이무료하답 2
ㅠㅠ
-
미적이랑 표점 1점차던데
-
재밌긴했어요 솔직히 힘들면서 재밌는…
-
목동시대 문과기준 합격할까요? 성적표를 안올렷네요 최저는 맞췄는데 수학을...
-
이 빠졌다;; 7
apple -> appl
-
상향으로
-
확통사탐입니다 과중 나왔는데 문과적 성향이 좀 더 강해요 근데 그렇다고 인문계열쪽에...
-
가고 싶은 학과, 학교가 있고 되고 싶은 모습이 있는... 되는 대로 살다보니까...
-
ㅇㅇ
-
삼선 쓰레빠가 국룰 아님?
-
깡표대학인것도 좀 신기하고 오옹
-
어디까지 붙는거임?
-
재수 한번하니까 11
시간감각이 다 죽었네 고등학교 n학년이 몇년전이었음?하면 대답을 못함 지금이 몇살인지도 헷갈림
-
선택자들 매일 강제로 샤워시키기
-
26 수특 표지 1
뭐에오?
-
ㅈㄱㄴ 헤어지고 진짜 당분간 아무도 만나고싶지 않은게 정상인가요ㅠㅠ 너무 힘드네요
-
높과 스나> 빵나도 내 점수까지 안내려옴 낮과 스나> 폭나서 우주예비받음
-
아시는분!
-
요새 너무 돌아다녔더니 몸살날거같아요 취소했는데 환불금 언제 들어와요,?
-
발 존나 시려움
-
물2 0
이번년도 두날개 언제나올까요?
-
ㅈㄱㄴ
-
11만 5000명 들어왔네요
-
목동시대 문과기준 합격할까요? 최저는 맞췄는데 수학을 너무못봐서 혹시나 해서요...
-
선착한명 고고햇
-
아니면 원광대 수의대가 먼저 생길까
C인가요?
C++ 이에용