컴공 일기259
게시글 주소: https://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를 선물하세요.
-
메가톤급 신인 등장으로 기존의 가수들이 촌스러워 보여야 함 그래야 세대가 바뀜
-
동창중에 연옌 많음
-
친구는 (나) 조건 보자마자 a랑 b 값이 바로 나와야 한다는데 전 이정도밖에...
-
전역이다! 4
일년 후 이날에...
-
5세대 워딩이 킹받지만 유익하네요.
-
곧 삭제 될듯 www.youtube.com/shorts/ks8cl0b3
-
백지헌 이나경 이채영 박지원 장원영 안유진 윈터 카리나 지수 슬기 아이린 은하 아린...
-
3.한완수 교과 4.한완수 실전 5.이해원s1 6.이해원s1 7.이해원s2...
-
고1 수 상 하 내용 노베이스 공통수학 1,2,로 수강 해도 충분히 무리 없이...
-
5시의 신촌은 아무도 없는데
-
요즘 살 좀 찌고 나오는거 보니까 ㄹㅇ 천상계인거 같더라 원래 안유진파였는데 바뀌었음
-
내일 아침은 초코 쉬폰 케이크와 바닐라 아이스크림, 카야잼을 넣은 따뜻한 우유 한잔...
-
의대붙어도 약대가고싶음 사시류모르겟어 대학재발 붙어주새녀
-
요즘쉨들~,,1세대가 낭.만.이거.늘 ㅉㅉㄹㅉㅉ
-
브리또에는 밥 넣는데....실망이었음
-
이쿠라 사랑해
-
일단 내돈내산 인증박고 갑니다 (절대 이전 엄기은쌤 수강생 글보고 올리고 그런건...
-
콜팝이엇음 푸흡
-
이퀄라이저끄니까 0
목소리가너무크다…
-
케밥임
-
댓글로 중계함
-
본인 최신 걸그룹 지식 13
베이비몬스터(아현? 이름만 알고 얼굴이랑 매치 잘 안됨) 트리플에스(김유연만 앎)...
-
댓으로 그룹말하면 그 그룹 최애 말하기 ㄱㄴ함 아니면 최애곡 1세대 걍SES...
-
내 이상형 5
나보다 수학이랑 물리 잘하는 사람
-
예아
-
[소개 및 성적인증] https://orbi.kr/00071877183 안녕하세요...
-
차렷
-
컨셉이 아니었던거군요....
-
의대 국가고시 2
국가고시 합격하고 전공의 안하고 그냥 일반의하면 뭐하면서 살아요?
-
별볼일없는놈이니 답변받아도 한귀로만 듣기
-
첨재봣는데 한달만에 4키로정도 쪗네 이상태면 수능때쯤이면 40키로가 찌는..
-
기습 이상형 공개 10
-
수시로 이대 높공 왔고 수능 33233이었음(전부높3,낮2) 당시에 수시...
-
위에서부터 순서대로 지니어스 베이비몬스터 트리플에스 비비업 아일릿 리센느 유니스...
-
제가 미적은 실력은 물론이고 실전개념이 덜박혀있어서 현강에 뉴런이랑 병행하면서...
-
맞팔구해요 1
자다깨소 들어와봤습ㅂ니다
-
?
-
이상하게 생각하지 말고 약간 이런 느낌 좋아하는 듯
-
물리 난이도 23=24>25 어떻게 생각하심? 이거 맞음?
-
지방이라 그른가 고딩하긴 지능이 좀 부족하고 강사하기엔 경험이 부족해서 중등...
-
연계고재 세개 포지겹치는건가요?? 아님 강e분정리집하고 둘중하나 풀면되는건가..
-
이 짤은 걍 연옌중에 젤 예쁨 내 맘이니 반박 안받음
-
발음도 어렵고
-
다들 잘자요 5
안녕히 주무셈뇨
-
이해원 기습숭배 0
잘부탁드려요
-
그냥 수강생이 듣는 강사 찬양하는 뻔한 글이었는데 이렇게까지 해주시다니...
-
지구과학 애매하게 공부한 느낌의 지식밖에 없음 신생대 중생대 고생대는 아는데...
-
상대 여자애들이 얼마나 놀라겠음 싱글벙글 나왔는데 3-4살 연상 등장하면 애들이...
-
외모언급안하기… 0
근데이제 나만안한다고 되나
C인가요?
C++ 이에용
이런 내용들은 어디서 배울 수 있는건가요...독학으로 하시는 건가요?
독학, 책이죠 뭐