컴공 일기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를 선물하세요.
-
원래 6,7시에 일나다가 12시에 일어나니깐 정신을 못차리네요ㅠ 7시에 알람듣고...
-
알바면접 구라 15
알바면접볼때 6달 일 못해도 그냥 6달 할 수 있다하는게 나음? 근데 구라치는거...
-
해커스 보카 어원편 외우고 다음책으로 넘어가려는데 해커스 커리 따라가는게 더 나을까요?
-
연대야 연대야 학비 줄게 조발 다오 연대야 연대야 딸깍해 오너라 등록금 바로 줄게...
-
인설의 이상은 그래도 갈것같은데 그 아래부터는 이게 업그레이드인지 다운그레이드인지 심각하게 고민될듯
-
에프터눈 안농 0
-
성공 ㅎㅎ 4년 다녔던 영어학원..
-
ㅇㅇ?
-
“치대는 웃고있다...“
-
Pedal triangle의 외접원은 영어로 뭘까요 (쉬움)
-
원래 의대 3장 박을거였는데 치대나 경한 섞으신분 계심?
-
아니 증원한다고 이렇게 난리부르스 떨 일인가??? 다른 과들은 증원하니 마니 해도...
-
아무것도 나오지 않은 상황에서 수험생 선동해서 얻는 이득이 뭔지? 어차피 칼은...
-
흠냐뇨이 3
역시 킹냥이
-
안봐야 대학가는데
-
"지난달 中해커 침투한 美정부 기관은 대북 제재 등 담당 부서" 1
美당국자들 "중국, 잠재적 제재 대상 정보에 큰 관심" (서울=연합뉴스) 신재우...
-
'수족삼각형'은 영어로?
-
안녕하세요. 이제 현역인 정시파이터입니다. 다름이 아니라 현재 미적을 공부중인데,...
-
주민번호·혼인증명서 등 북 해커 유출 법원행정처…과징금 2억원 1
(서울=뉴스1) 이기림 기자 = 개인정보보호 법규를 위반한 법원행정처가 총 2억...
-
영어 네이티브급으로 잘해서 수능 성적 좀 낮아도 학벌+영어실력으로 취업 질 ㅅㅌㅊ임ㅋㅋ
-
절레절레
-
이걸 이제야 봤네...
-
먼지는 안 알려줌
-
티원 경기 보러갈까라는 생각을 했지만 다시 티원 티켓팅 성공할거라는 헛된 희망가짐...
-
똥복사기 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
먹는건가요
C인가요?
C++ 이에용
이런 내용들은 어디서 배울 수 있는건가요...독학으로 하시는 건가요?
독학, 책이죠 뭐