컴공 일기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를 선물하세요.
-
경희 경제 44명 뽑고 지금 33등인데 이정도면 되죠?
-
ㅎㅎㅎ 0
ㅎㅎㅎㅎ
-
신세한탄할 곳이 여기밖에 없다 보니 참
-
대충 성비가 7ㄷ3 많으면 9ㄷ1 이럽니다 여기서 연애를 하는 경우는
-
저녁 ㅇㅈ 3
싸이버거 먹어야지
-
얼마나 올진 모르겠지만… 여러모로 끼어있는 세대라 저희끼리 소통할 창구도 있어야...
-
자칭보수틀딱특) 3
탄핵 찬성하면 다 중국놈이고 종북좌파이고 이재명 지지하는 줄 알고있음 정치얘기 끼고...
-
초록 녹색이 안뜨고 합격가능성칸에 제외(수탐)이라고 뜨는데 이거뭐가 잘못된건가요?...
-
계약학과에다가 올해 신설인데
-
나 슬퍼
-
이름이 스타팅 블록이니까 뭔가 좆밥같아 보였는데 실제론 생각보다 존나 어려움
-
로스쿨 목표가 있으면 경희대 외대 안 가고 시립대는 좀 아니겠죠..? 학비도 싸서...
-
국어 6
강사 커리를 꼭 타야하는가? 혼자할수가 있나 국어를?
-
강기원 1주차 수업 전 어디까지 풀어가야 하나요ㅠㅠ
-
ㅜㅠ 2점만 어케 안되나
-
낙사가 의대 반수생을 고려를 안한다네 이러면 말이 됨
-
로또 맞고 싶다 0
맘 편히 메디컬 무한n수 갈기게
-
진학 성사과 0
모집인원은 216명인데 왜 최초합을 100명이내로 주는건가요?? 표본이 덜 차서...
-
내 드림워치임
-
면회좀 자주 와줘라 해피포인트로 케익 사와라
-
진학사 왜그래 아니라고해줘
-
1칸 스나 두개 0
지를거임
-
내가 직접 봄
-
과외로 돈벌고 주식으로 불려서 재수때 들어간 비용 엄빠한테 갚아야지
-
뉴스에서 의대 반수 4000명 늘었다는데 거의 다 미적 선택자 일테니 미적의반...
-
새내기 1년동안 연애 확률 몇%임
-
진지하게 몇개는 붙을 기미가 보이네요 안쓰고 후회하지 마세요
-
헬스완뇨 0
다리가 후들후들
-
그래서 존예아니면 걍 톡 씹음
-
321343 물1 생1 했는데 재수는 죽어도 하기 싫다. 여기서 들어갈 수 있는...
-
굳은살 생겼뇨 1
오…오랜만에 보는
-
대학어디가 같은 곳에서 발표하는 입결표에서 최종등록자 기준이라는게 추합인원도 전부...
-
안녕하세요 저는 올해 3월부터 7월까지 수능선배 재원생이었던 재수생입니다. 재원생...
-
이투스 독재학원 곧 가는데 영단어 아침에 매일 테스트 본다는데 5
도움 되는 거 맞나?? 매일하는 건 도움될지 잘 모르겠는데 참고로 25수능 듣기빼면 77점임
-
1학기는 다녔고 2학기는 미등록 제적상태인데 자퇴서 내러 가야할까요 학적상태에...
-
질문 받아주세요 0
대형과 모집인원 100명을 뽑는데 표본이 많지가 않아서 최초합 순위는...
-
왜 서울대는 나군에 밖에 없는거지...
-
알바 걍 포기함 7
안잡힘
-
서성한 핵폭느낌 3
진심 냄새 나만 나나 서강대 성균관대 한양대 얘내 꽉낀듯 ㄹㅇ 특히 성대도
-
ㅈ댓다 ㅋㅋ
-
안정박기엔 가군이 아까워지고 나머지는 3칸 2칸이 끝인데
-
소신발언) 기성세대한테 인식 좋은 대학 가겟다는 건 진짜 바보임. 12
그럴거면 건동홍 버리고 영남대 가면됨 ㅋㅋ 역사없는 건잡대보단 지방 명문 사학인...
-
⭐ 연세대학교 중앙새내기맞이단에서 25학번 아기독수리들을 환영합니다 ⭐ 0
⭐ 연세대학교 25학번 아기독수리들 주목 ⭐ 안녕하세요! 연세대학교...
-
이미 이성 간 연애시장은 레드오션임 난 블루오션을 노린다
-
같은 뜻이구나 몰랐음뇨이
-
폭인 걸 알아도 0
폭일 거라 예상해도 쓸 수 밖에 없음... 반영비 + 영어 + 변표 때문에 그...
-
진학사 보면 고연이 지급 빈집이 많음. 다 쫄려서 낮게 쓰네 ㅋㅋㅋ
-
4당5락 5
적어도 지금 수능에는 전혀 안맞는 말이라고 생각함 국어시간부터 뇌가 안돌아갈듯
C인가요?
C++ 이에용