컴공 일기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
인정하면 ㄱH추 빨리 누르셈
-
이공계 기준으로 대학 공부가 어렵나요, 입시 공부가 어렵나요? 1
과는 전자과구요... 인서울 중위권 수준 대학일 때 대학 공부 많이 빡셀까요?
-
러셀 질문 3
수능을 망쳐서 재수하게 되었습니다. 9평기준으로 연고대반 들어갈수있더라고요. 막상...
-
아무도 나랑 안놀아줘.. 리그 시작해야 놀아줄거니..
-
성적표 인증도 없고, 수강생 인증도 없고 도대체 뭘 인증하고 수능 국어를 가르친다고...
-
안녕하세요 올해 재수를 한 재수생인데요, 1년동안 기숙학원에서 재수를 한 끝에...
-
연대 2
도대체 연대 표본은 언제 들어옴?
-
열 번째 팔로워 13
가 될 수 있는 기회를 드릴게요
-
남들 팔로우 하고싶은데 글쓸때마다 알림와서 안했는데,, 어케 바꿈뇨
-
1. 맨날 날 끌고다니는 애 2. 꼽사리껴서 맨날 얻어먹는 애
-
이것도 지워질지 모르겠는데 워낙 알바들이 이런 글 지우는데만 열심히라.. 후기를...
-
헉헉 따흐흑 4
하으으응 헤응 헉헉
-
서울대 내신 1
컨설팅 에서 본인 내신이 2.5정도인데(컨설팅 가기전에 생기부 제출함)AB준다는데...
-
누구는 가군 쓰는 학교가 무조건 된다고 나군에 상향 지르라하고 누구는 안될수도...
-
오댕이 프사를 다니까 16
오댕티콘을 쓸 때 내가 직접 포즈를 취하는 거같아서 먼가 기분이 묘함 나 사실 핑크색 강아지였나
-
와 이건좀... 13
너무 싹바가지 없네... 말을 왜 저렇게 하노
-
문디컬로 미적 확통중 범위 넓은건 무엇인가요?? 확통은 수학 만점 또는 96점...
-
진학사 사고싶은데 12월에 돈 쓴 곳이 넘 많아서 못 살 거 같아요..ㅠ 서경대...
-
5칸 가능세계있음?
-
막판에 30명 넘게 몰릴수가 있나?
-
발뻗잠 ㄱㄴ? 14
제발 잘 수 있게 해줘요ㅠㅠ
-
엄마친구아들은 영재고 -> 서울대 갔고 엄마친구딸1은 성대갔고 엄친딸2는 건대 갔고...
-
옯서운이야기 2
-
볼때마다 웃김 0
한화생명 유일한 호감작임
-
옯서운 이야기 3
저런 옯서운 이야기를 보면서 공감하는 오르비언들이 아직도 오르비를 한다는 게 ㄹㅇ 옯서운 이야기임요
-
ㄹㅇ 첨들어보는디
-
대통령 권한대행 갓 댕 이
-
이 성적으로 어디갈수있는지 대충 알아야할까요.. 어차피 원서는 안 쓸건데 고민되네요
-
도대체 어디가 안 맵다는 거임?
-
ㅈㄱㄴ 성대 밖에 없지 않나?
-
원서 얼마 안남아서 정보 구하고자 글 씁니다 국어(화작) 117 3 수학(확통)...
-
2g폰이라 시대인재 앱 못깔아서 스티커 qr 발급받아야하는데 일욜 아침 신관...
-
매새 계속 도전하는데도 맵다
-
한명은 앞으로도 월즈를 우승하지 못하고 한명은 평생 같은 팀을 할수 없는 운명에...
-
Ex) 논리,먈싸움,관계우위
-
집이 좀 어려워서 11만원은 너무 부담이라 그런데 고속만 사서 봐도 될까요?
-
홍대미대 0
과잠 한국어로 딱 홍익미대 써놓은거 예쁜데 내년에 홍떨하면 저런식으로 과잠 따라하고싶다 욕먹을듯,,
-
단국대, 원광대 인원 감소가 진짜 뼈아프네..
-
아 할게없네 3
뭔가 공부를 하자니 안땡기고 공부를 안하자니 할게없는 기현상이 아 블루아카 한번...
-
'ㅋㅋㅋㅋㅋㅋㅋ'보유하신 분 있나요 ???????????????? 뭐 이런 느낌...
-
에피 메일 6
정보 누락되서 다시 보냈는데 괜찮나요?
-
그냥 요즘 다 뜯어고치고 싶음ㅠㅠ 코랑 양악도 하고 시픔… 근데 ㅈㄴ 무서워서...
-
한완기 질문 1
테마편이랑 평수능이랑 뭔차인가요? 그리고 94년도부터 전문항 수록이라는데 진짜 전문항 다실려있나요?
-
스테로이드 고려해도 ㅈㄴ 피땀흘려 만든 근육인데 ㅠㅠ 같은 방 수감자들로...
-
주말에 안하면 월요일에 올려주나…..????
-
내일은 늦잠자야지.... 머리는 따끈하고 발은 차갑고 심장박동도 개이상하고 목에선 피맛남
C인가요?
C++ 이에용