컴공 일기259
게시글 주소: https://9.orbi.kr/00070852115
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를 선물하세요.
-
작년엔 가천대도 못붙었는데 그래도 올해는 숭실 동국 홍익넣고 원서생각하면서 기다리는...
-
붙나요? 윗순위라 궁금합니다
-
킁 개 좋네 4
캬
-
영어 기출문제집 0
영어 기출문제집중에 3,4,7,10모만 다루는 문제집 없을까요?
-
정보수업이어서 교실이동해서 2시간정도 수업했는데 여느때처럼 업드려 딥슬립에 들었다....
-
무슨 2월까지기다려어엉ㅇㅇ엉ㅇ어어엉ㅇㅇ
-
[고려대학교 25학번 합격] 합격자를 위한 고려대 25 단톡방을 소개합니다. 1
고려대 25학번 합격자를 위한 고려대 클루x노크 오픈채팅방을 소개합니다. 24학번...
-
무서운 이야기 4
오르비에는 가끔 온갖 분야를 꿰고 설교까지 하는 전문가분들(학부1학년, 대학입학전)이 나타난다
-
스텝0 전 단원 다 풀고 스텝1? 아니면 단원별로 스텝0 스텝1?
-
십덕들 주목! 9
-
한학기 다니고 반수 예정입니다 만약 계속 다닌다면 전자는 무조건 복전하고요
-
야짤 투척 1
너무 야해....
-
반도체관련 취직하려면 어디가 좋나요
-
믿음도 ㅈ도 안가는데 환자 대학병원에서 수백수천명 본 전문의랑 기량이 ㅈㄴ...
-
얼버기 2
버기
-
얼버기 7
갓생 2일차
-
꾸중글 0
꾸중꾸주ㅇ
-
커뮤에서 활동하는 컨설턴트는 수두룩빽빽인데 왜 자기네 컨설팅 불호후기나...
-
로스쿨 왜 가냐 3
변호사 인구 ㅈㄴ많은데 돈도 요즘 ㅈㄴ 못 번다는데 워라벨도 죽었고 그 노력에...
-
환자수가 훌륭한 의사를 만들어주는거임 의사가 혼자서 공부 디지게 열심히 해봤자 환자...
-
어디서 보는질 모르겟어서..
-
점공 더 이상 안들어온 것들은 싹다 허수로 취급한다 0
니들은 내 앞순위도 아니고 점공 하나마나인 친구들로 간주한다
-
의료는 생각보다 대량생산, 시스템화 하기 어려운 분야니까 그런데 “생각보다 괜찮다“...
-
통풍이 작년봄인가 그때 아프고 또 재발했나보네 절뚝절뚝거리고 발날로 걷는중 왼발은...
-
이대로 히키로 사느니 광대라도 해보자
-
안녕하십니까 도움을 주시길 간청드립니다 ㅠ 수능을 오랜만에 준비하는 N수생 입니다....
-
ㅜㅜ
-
이제는 달릴 일만 남았다
-
if국수만점, 과탐 선택 물1vs생1 (서울대의대) 6
국수 만점이라고 했을때, 서울대의대 과탐 1과목2개로도 가는case가있길래 천장을...
-
감기 걸렸다... 12
기침이....
-
작년에도 뉴런 했었는데 또 사서 들을 가치가 있나요?
-
오늘?부터 다시 공부 시작해요 지옥을 가보자고! 피램 킷타!!!!
-
고3때 시발점 미적분 상,하 듣고 워크북이랑(step2는 다는 못품) 쎈 풀고 뉴런...
-
고3 훈수 1
겨울방학 동안 몇과목 빡세게 집중해서 하기 vs 전과목 다 하기 13일동안 거의...
-
안녕하세요. 저는 공군 상병으로 현역 복무중인 03년생입니다. 특정되는거 감수하고...
-
자녀에 대해 다 안다고 생각하는 학부모 이건 답도 없다
-
문과에서 살아남기 1 35
안녕하세요, 한달뒤는입니다. 문과가면 큰일나는 것 같은 요즘 분위기에서 인문계...
-
요즘 12시에 일어나서 나한텐 지금이 점심임
-
대기업도 보면 임원진들은 남자가 대부분이던데 물론 4050 여자들은 애 키운다고...
-
운동화 신어도 됨?????????? 남색 나이키 운동화
-
어느정도 갈 수 있을까요...?? 언매/미적/화생 입니다! 영어 1 한국사 3이요...
-
ㅇㅂㄱ 6
오르비에서 저격먹는 꿈을 꿨어오..
-
공대기준 + 가천대 신소재는 낮공인가요? 차라리 삼수해서 광운이 날까요?
-
펜션에서 첫날밤 2
너무일찍깸.. 춥다ㅏ
-
현역때 76점 받고 멘붕왔던게 엊그제 같은데 벌써 2년전이네요 다항함수 비율비가 잘...
-
애니드라마유튜브생방등 시간길고재밋는거 ㅊㅊ좀
-
미적이랑 생윤 못하고 지구만 2등급인데 확통 지구 사문 확통 한지 사문 중에 뭐가 괜찮을거같아
-
점공 22등 3
29명 모집 추합은 당연히 없고 1차 합격 점공률은 60%이상 합격 가능할까
-
현역 평백 79.8 국숭 낮과 재수 평백 94.3 성대 자과계 평소 더프 보던것보다...
C인가요?
C++ 이에용
이런 내용들은 어디서 배울 수 있는건가요...독학으로 하시는 건가요?
독학, 책이죠 뭐