컴공 일기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를 선물하세요.
-
새르비 오랜만 1
ㄹㅇ 찐 새르비네 리젠이 아예...
-
전 우울할 땐 그냥 앱을 삭제해버림뇨 아예 안 들어옴 장점은 그 누구에게도 민폐...
-
발표가 뜬다
-
건강하새오
-
공수2-2 4
틀린거 있으면 말해주세용
-
.
-
(딸깍딸깍 세계시각을 켜고) 런던 거주중입니다
-
탈릅. 5
형 간다.
-
특히 조정식이.. 나라도 방송 나가면 저렇게 할 거 같은데 해석 어버버거리는 걸로...
-
25수능 생2 12번 해설; 정석적인 풀이방향은 ㄱㄴㄷ대로...? 6
ㅅㅂ 이렇게 풀기를 원하면 시험시간은 50분으로 해줘야지 다시 풀어보니까 못해먹을거...
-
질문 받음 실제로 본 거임
-
데쌍트 롯데리아 곤트란쉐리에 (노브랜드 버거->노브랜드 피자) 타코벨 카페...
-
최근 기출만 선별해서 풀거면 장영진t 기출봐도 될듯? 1
그냥 책 한권 pdf로 뿌리시네
-
국어: 수특 수완 검더텅 각 2회독 -> 1등급 영어: 수특 수완 EBS파이널...
-
노대 인문 어때요? 18
장학 왜케 맛있음 ㄹㅇ 목시 컷 오를 거 같아서 그냥 노대 갈까 싶은데 어떰뇨?
-
기하나 미적 하는게 낫나요? 지금은 문과라… 수학을 이과쪽으로 하고 사탐을 해도...
-
1년동안 8명가르쳤습니다,, 시급이 일반 알바에 비해 많이높아서 좋긴한데 가르치는게...
-
내인생계획 7
군대에서행정고시준비하기 일초에피셋합격 상초에2차합격 병장때최종합격 법률저널 인터뷰:...
-
이미지 관리 시작
-
공수2-1 8
매일마다는 아니어도 조금씩이라도 올리겠음
-
기원이 문제량 적다는 얘기가 있다하던데 상방 뚫기 용으로 강기원만한게 없나 반면...
-
말로 형용할수없을듯....
-
성인기념? 입학기념? 으로 지갑 팔찌 신발 가디건 목걸이 해서 740만원정도썼어욤...
-
수학뺴고다물어보셈
-
대학생분들 2
목표가 있나요?
-
오르비에 공유(?)해주실분
-
얘전에 봉사할때 정말 많아야 30정도? 눈으로 봤을땐 25정도 이지 않을까 하는...
-
ㅇㅈㅎㅈㅅㅇ 1
ㅇㅈ ㄱ
-
이러면 곧 키배터지나?
-
샤인미 N제 vs 한석원 4규 시즌2 기존 풀던 드릴/드릴드 끝나가서 풀어볼까...
-
26도 받으러 가야겠다 가서 국,수만 치고 나와서 점심먹어야지
-
근데그러면님들이싫어할거같애서
-
큰일이네 2
요즘너무늦게자는듯
-
아빠생일선물삿음 8
케이스도사고 삼케플까지들엇어 미역국도끓일거야
-
래브라도 리트리버 (?) 짱 귀여움
-
근데 금테를 달기에는 팔로워를 못 올리겠음 뻘글이나 써볼까요
-
이거 구라겟지 2
???
-
문과분들께 여쭤봐요 13
1. 혹시 고2때 사탐 몇과목 하셨나요 2. 과탐 진로선택과목도 하셨나요 3....
-
이쯤되니 의예과 더블링 어케 해결할 지가 궁금해짐 16
7년제? 유급은 진짜 전교 1-2등끼리의 싸움이라 비관 자살 나올 것 같음 26까지 받아버리면...
-
ㅇㅈ 0
메타열어줘
-
48명 남았네요
-
어느정도 안도함 실제로 그 덕에 비교적 편하게 본듯
-
어쩐지그댄내게말을안해요 허면그대꿈속으로날아가 살며시 얘기듣고올래요
-
https://orbi.kr/00026573385 낼부터 전단지 바로 만들어볼려고요
-
그랬었다구요
-
너 나이로 벌써 4수잖아 남자라서 군대도 가야되고 재수로 서강대까지 갔으면서 꼭 서울대를 가야겠니?
-
환급가능 대학에 올해 신입생으로 있는데 올해 수능보고 그냥 복학하면 환급 되나요?
-
어땠음...?
C인가요?
C++ 이에용
이런 내용들은 어디서 배울 수 있는건가요...독학으로 하시는 건가요?
독학, 책이죠 뭐