컴공 일기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
키싱앱 너무 굿
-
너무 막바지에 있어서 무서운데 추합도 많이 안 돌 것 같아서...
-
ㅋㅋㅋㅋㅋㅋㅋ아 설윤교로결정햇다고 글을 썼네….사범 안 썼습니당 (╹◡╹)
-
근데 교육청은 대체적으로 계산량이 좀 있는거 거 같음
-
멘사코리아 직접 가서 iq테스트 해보신 분 있어요?? 17
멘사코리아에서 주최하는 멘사테스트를 쳐볼까 하는데 (25년 일정은 아직 안 나옴)...
-
단어가 개어렵네 0
영어 고1에서 고2모고로 올라오니 단어가 진짜 개어려운데 단어부터 외우고 오는게 맞으려나
-
이제 빨뻗고 똥글 쓰자
-
철학의 본질이 인간의 존재에 대한 질문과 탐구라면 신화는 가장 오랜시간 이어져...
-
농협 하나로마트 만세
-
내가 미안해 빨리 돌아와줘
-
초염몽 원톱으로 스토리 밀었어서 갸라도스 <<< 이새기 진짜 통곡의 벽이였는데 이...
-
작년엔 가천대도 못붙었는데 그래도 올해는 숭실 동국 홍익넣고 원서생각하면서 기다리는...
-
붙나요? 윗순위라 궁금합니다
-
킁 개 좋네 5
캬
-
영어 기출문제집 0
영어 기출문제집중에 3,4,7,10모만 다루는 문제집 없을까요?
-
무슨 2월까지기다려어엉ㅇㅇ엉ㅇ어어엉ㅇㅇ
-
[고려대학교 25학번 합격] 합격자를 위한 고려대 25 단톡방을 소개합니다. 1
고려대 25학번 합격자를 위한 고려대 클루x노크 오픈채팅방을 소개합니다. 24학번...
-
무서운 이야기 4
오르비에는 가끔 온갖 분야를 꿰고 설교까지 하는 전문가분들(학부1학년, 대학입학전)이 나타난다
-
스텝0 전 단원 다 풀고 스텝1? 아니면 단원별로 스텝0 스텝1?
-
반도체관련 취직하려면 어디가 좋나요
-
얼버기 2
버기
-
얼버기 7
갓생 2일차
-
꾸중글 0
꾸중꾸주ㅇ
-
커뮤에서 활동하는 컨설턴트는 수두룩빽빽인데 왜 자기네 컨설팅 불호후기나...
-
로스쿨 왜 가냐 3
변호사 인구 ㅈㄴ많은데 돈도 요즘 ㅈㄴ 못 번다는데 워라벨도 죽었고 그 노력에...
-
환자수가 훌륭한 의사를 만들어주는거임 의사가 혼자서 공부 디지게 열심히 해봤자 환자...
-
어디서 보는질 모르겟어서..
-
점공 더 이상 안들어온 것들은 싹다 허수로 취급한다 0
니들은 내 앞순위도 아니고 점공 하나마나인 친구들로 간주한다
-
의료는 생각보다 대량생산, 시스템화 하기 어려운 분야니까 그런데 “생각보다 괜찮다“...
-
통풍이 작년봄인가 그때 아프고 또 재발했나보네 절뚝절뚝거리고 발날로 걷는중 왼발은...
-
안녕하십니까 도움을 주시길 간청드립니다 ㅠ 수능을 오랜만에 준비하는 N수생 입니다....
-
ㅜㅜ
-
이제는 달릴 일만 남았다
-
if국수만점, 과탐 선택 물1vs생1 (서울대의대) 6
국수 만점이라고 했을때, 서울대의대 과탐 1과목2개로도 가는case가있길래 천장을...
-
작년에도 뉴런 했었는데 또 사서 들을 가치가 있나요?
-
오늘?부터 다시 공부 시작해요 지옥을 가보자고! 피램 킷타!!!!
-
고3때 시발점 미적분 상,하 듣고 워크북이랑(step2는 다는 못품) 쎈 풀고 뉴런...
-
고3 훈수 1
겨울방학 동안 몇과목 빡세게 집중해서 하기 vs 전과목 다 하기 13일동안 거의...
-
안녕하세요. 저는 공군 상병으로 현역 복무중인 03년생입니다. 특정되는거 감수하고...
-
자녀에 대해 다 안다고 생각하는 학부모 이건 답도 없다
-
문과에서 살아남기 1 43
안녕하세요, 한달뒤는입니다. 문과가면 큰일나는 것 같은 요즘 분위기에서 인문계...
-
요즘 12시에 일어나서 나한텐 지금이 점심임
-
대기업도 보면 임원진들은 남자가 대부분이던데 물론 4050 여자들은 애 키운다고...
-
운동화 신어도 됨?????????? 남색 나이키 운동화
-
어느정도 갈 수 있을까요...?? 언매/미적/화생 입니다! 영어 1 한국사 3이요...
-
ㅇㅂㄱ 6
오르비에서 저격먹는 꿈을 꿨어오..
-
공대기준 + 가천대 신소재는 낮공인가요? 차라리 삼수해서 광운이 날까요?
-
펜션에서 첫날밤 2
너무일찍깸.. 춥다ㅏ
-
현역때 76점 받고 멘붕왔던게 엊그제 같은데 벌써 2년전이네요 다항함수 비율비가 잘...
C인가요?
C++ 이에용
이런 내용들은 어디서 배울 수 있는건가요...독학으로 하시는 건가요?
독학, 책이죠 뭐