컴공 일기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를 선물하세요.
-
군청과 봄망초를 마스터하는 그날까지
-
서울대 윤교 14
가군 고대 경영 다군 성대 글경인 395.1? 이셨나 그분 고대로 빠집니다 새별비분...
-
대가리로는 윈트북 사야된다는 걸 아는데 가슴이 시키는데…
-
정시 선택 0
언매 확통 생명 생윤 이과지원 가능?
-
책상에 엎드려 자면서 짝녀랑 섹스하는 상상하는 꿈을 꿨음 문제는 잠꼬대를 ㅈㄴ 크게...
-
점공률 60퍼센트에 등수가 모집인원-2이면 좀 위험함? 3
여기 떨어지면 갈 곳 없음 ㅇㅇ 많이 위험한가여
-
렉스김/ILE/PEAI 생각하는 황소 CMS/엠솔/올림피아드 다원 시리우스
-
이건 닥전임듯
-
아이크림발라볼가요,
-
몸에 맞지 않는 옷을 입은채 태어나 벗는게 불가능하지는 않겠지만 엄두도 안나고 너무...
-
고등학교 때 다녔던 수학 학원 가서 선생님이랑 밥 먹었는데 원서 얘기 나와서 “ 아...
-
형왔다 9
인사해라
-
영어 발표수행인데 선생님들끼리 회의 안됐다고 평가기준 안정해두고 수행봄 ㅋㅋㅋㅋ...
-
틀주의) 7
에잉 요즘 샤인미는 좀 쉬?워졌어 미적은 ㅇㅈ인데 공통 무ㅜ냐
-
고1 모의고사도 4등급이었어
-
맞팔 구합니다 5
제 소개를 하자면 25수능 한국사 원점수14로 높은 7등급입니다 잘 부탁드립니다
-
3칸스나붙어야합니뇨이..
-
안녕히주무세요 6
좋은 꿈꾸시고 내일뵈요
-
메가스터디 패스 동일계정 두사람이 이용 가능해요? 10
제 동생은 다운로드 해서 듣는더는데 저 인강 볼동안 얘 만약 로드인해서 들어도 안꺼나나요?
-
누가 봐도 억까인데 그냥 그걸 감수하고 딴거 잘해서 등급을 따야 하는 경우가...
-
미리 사두게 말좀해줘
-
아가들아 14
첫번째사진은 2019버전인데 오타임
-
셈퍼님 계산기 잘 맞던가요
-
내신 쉬운 학교에서 1점 중후반 받는 수시러입니다 3합 6 최저 맞추는게 목표에요....
-
걍 그때 엎어버릴걸
-
뭐고름?
-
국어 커리 0
독서 김동욱 문학 박광일 로 가도 괜찮을까요?
-
님 판단이 맞고 부모님이 틀린거 맞다. 그래도 그런 부모님을 용서해드려라 그리고 님...
-
교수 ㅇㅋㅎㄴ
-
1등이랑 꼴찌랑 20점 이내일때 cc랑 bb는 얼마나 차이나는 건가요??
-
서울대 1
서울대 70퍼 컷
-
거리적인 부분은 제외하고 대학 급간으로만 봤을 때 어디로 가는게 나을까요.?ㅠ...
-
누가이김?
-
유물 ㅇㅈ) 13
ㅈㄱㄴ
-
어떤 사람들은 수능만 바라보고 열심히 뛰다 점차 자신을 잃어버림 결국 달리기의...
-
1달동안 5.5kg 뺀듯
-
ㅋㅋㅋㅋㅋㅋㅋㅋ재밋겟는데
-
3키로빠졌다… 1
방학 1주만에 3키로빠짐…..왜지….. 하루2끼먹어서그런가….공부해서그런가 근데...
-
어느 정도의 수준이지
-
그냥 그 사람의 능력이나 성과가 뛰어나기 때문임뇨 뭐 마인드가 중요하다 만족의...
-
삼도극 0
아니 근데 삼도극 킬러문항을 없앤다고했지 삼도극을 없앤건아니지않나요? 작년에만...
-
지금 77임….뒤룩뒤룩 살찐거 어떡하지
-
어후 근육통이야 0
몸이 왜이리 안좋지 파스도 붙였는데
-
44444444
-
인천 이었음
-
어디가지 7
숭실대 무역학과 vs 국민대 행정 vs 아주대 경영
-
다시 60키로대돌아왔네 10
ㅅㅅㅅㅅ 좃돼지에서벗어나보자..
-
안녕히주무세요 7
자러갈게요
-
두달 전 의대 수시 최저 충족했다고 글을 올렸는데 결국 예비번호 받고 쭉쭉 빠지다가...
C인가요?
C++ 이에용
이런 내용들은 어디서 배울 수 있는건가요...독학으로 하시는 건가요?
독학, 책이죠 뭐