컴공 일기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를 선물하세요.
-
똥복사기 0
할줄아는게없어 수능이 제일 쉽단게 어찌보면 맞는말임 생활감각 ㅂㅅ되네
-
님자친구새로생겨서 1돌전무해줌 ㅇㅇ…
-
흠... 5
자대 오늘 안 나오나 보네..
-
캬 ㅋㅋㅋㅋㅋ
-
문:독 틀린 비율이 7:3된듯 엌 ㅋㅋ
-
자 나가자~~
-
지난 14일이라는 뭉탱이를 26번만 더 보내면 2025년이 끝납니다... 1월 1일...
-
둘중에 뭐 키울까 15
육상거북 흰긴수염고래 둘 다 키우기엔 돈이 모자름
-
안녕하세요! 함께 꿈을 이루어 나가는 서울시립대학교 홍보대사 이루미입니다 ! 어느덧...
-
니가 벌레면 그냥 늦게까지 자라는 소리 그래서 전 늦게까지 잠
-
자작시하나 0
있었는데없어짐
-
틀린거 1,2개씩 있는 지문은 다시 처음부터 푸는게 맞나?
-
다 차단한 회원의 댓글임 ㄷㄷ 어떻게 다 하나같이 나에게 차단을 당했을수가 정말 무섭9나
-
열심히 살다 2
과로사해버리기 !
-
딱히 대놓고 이야기 한 적은 없는데 지방 의대는 국립이나 사립이나 간당간당한 곳...
-
더즌메러~~~ 2
특별한미엔유
-
지난해 국내에서 부동산을 사들인 외국인이 전년보다 12% 늘어 1만7,000명을...
-
국어 옛날 기출 8
옛날 평가원 기출(07~10 정도) 독서 파트에 가장 적합한 걸 고르라고 하고 1....
-
[단독] 한국 혼란 틈타 서해 노리는 중국...대규모 구조물 무단 설치 6
시설물 금지된 잠정조치수역에 중국이 최근 서해 한중 잠정조치수역에 무단으로 대규모...
-
리트 표점 계산 2
2025학년도 리트를 혼자서 응시해보려 하는데 혹시 표점 계산할때 메가 로스쿨에서...
-
뇌로 수타면을 쳐 만들었나 왤케 분탕질인거임?
-
의평원 불인증으로 개인이 불이익을 받을 리가 없지 않나? 3
그 대학이 의대를 운영할 능력이 안되서 그 대학을 벌하는 거라 이미 다니던 의대생은...
-
킬러 문제 0
5개
-
열심히 했다고 생각했는데 2024 고3 3모 3등급뜨네요… 공부 안했을때도 고2...
-
옯스타가 뭐죠 16
먹는건가요
-
근데 불인증 뜨면 아래메디컬에도 영향이 많이 가나요 2
치한약수는어케댐뇨
-
짜피 25부터는 의과학자임 의사가 아닌 의과학자 이기에 선배들 눈치를 볼 이유가...
-
인설의 다니면 15
대학 물어볼 때 대학 이름을 먼저 말할까 의대인 거를 먼저 말할까
-
봄인줄
-
제자야 반응해라 5
넵.
-
다음 닉 13
심심한 육상 선수
-
ㅇㅇ
-
조발 설 전에 1
연대 서강대 설 전에 조발할까요?? 제발 ㅠㅠ 전적대 빨리 자퇴하고 싶은데 합격...
-
물국어 표점잘나오는불수학 무난한영어 사탐공대도 없음.. 물론 나한테 기회였다는것임
-
아직 증원 반영한 의평원 인증 결과는 나오지 않았어요 6
정기평가의 중간평가라서 유예라도 준건데 왜 다들 낙관하는지 신기하네요?증원분을...
-
[차이밍옌 국가안전국(NSB) 국장 (대만 중앙통신사 갈무리=연합뉴스)] 대만해협을...
-
평가원 #~#
-
반응온다 13
-
26 모집정지? 0
26의대 안뽑으면 몇명 공개자살할듯
-
판다 ㅋㅋㅋㅋㅋㅋㅋ
-
무지무지단무지다
-
알고보면 니가 제일 불쌍해
-
닉변할 수 잇는 날이 오겟지..
-
제주공항 드론 촬영한 중국인 검거…"대공 용의점 조사" 5
[앵커] 지난해 중국인들이 미국 항공모함과 국가정보원 건물을 드론으로 촬영해 논란이...
-
정치글 주의) 8
-
카이스 아나토미 7
지금은 김범준 선생님 스블 하고 있습니다 고2 때 수1 수2 수분감 했었는데 솔직히...
-
정치글임 15
정시치대글임 지방치는 어느정도 맞아야 갈 수 있나요?
-
자사고 졸업했는데 1-1~2-1까진 4점대였고 2-2부터 정시파이터 한다고 성취도...
C인가요?
C++ 이에용
이런 내용들은 어디서 배울 수 있는건가요...독학으로 하시는 건가요?
독학, 책이죠 뭐