컴공 일기259
게시글 주소: https://a.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를 선물하세요.
-
걍 저 역은 누가 했어도 연기력으로 욕 먹을 자린것같은데 걍 저 역 자체가 존나 오글거림
-
국물이 시원해서 그럼 아무튼 그럼
-
다시 떠올려보려 하니까 내용은 하나도 기억이 안나고 재밌게 봤다는 그 생각밖에...
-
제가 며칠 전 조모상 때문에 수시 넣은 걸 최초합 이후로 확인할 겨를이 없었습니다....
-
진학사 6칸 0
현재까지 리포트에서 계속 최초합 6칸이었으면 붙는다고 봐도 될까요 과는 지방 약대...
-
상의 위에 검정 티셔츠 입고 밑 사진처럼 상의 오버핏 검정 블레이저 밑은 와이드...
-
두팀이 폭파된다는 얘기가 있다 난 한팀만 폭파될거라는 얘기를 더 좋아한다
-
맛있어
-
김승리 커리 5
이제 고3 학생입니다. 김승리 커리를 탈려하는데 2026 올오카 강의가 아직 하나도...
-
만약 3월 27일쯤 제대하면 그냥 일년쉬어야하는거에요..?
-
이거에 꽂힘
-
심찬우쌤 교재가 전년도랑 많이 바뀌나요?? (생글, 생감, 에필로그, 기출테마)...
-
반값인데
-
바로 폭당하네…며칠전 높5=>지금 아슬아슬5인데 4칸 바로될듯 ㅋㅋ
-
뭔가 어딘가에 하자있음
-
스스로에게 만족하는 순간이 올까봐 무서워요 뭔가 원동력을 잃게 될 거 같아요
-
확통스러운 케이스분류를 통한 수학 2 준킬러를 만들어봤습니다 아까 확통 문제가...
-
단국대식 인재인데 진짜로 나는 내년에 단국대가 인원이 반토막남.. 올해 못가면 진짜...
-
ㅅㅂ 아칼리 드간다
-
선호도 오케됨여??
-
혼자 물리1 처음 공부하려고 하는데 2025 수특 물리 푸는거로 괜찮을까요? 수특...
-
이번에 지인이 고민하길래 도움을 주고 싶어요. 건국대's 원하는 과는 아니지만...
-
드디어 이런 날도 오는군요 갓생러 입갤 ㅋㅋㅋㅋㅋ
-
선거법 1심이 유죄(그것도 집행유예라지만 징역형)가 나왔고,이화영 전 경기도...
-
치킨보단 피자지 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
한화생명 유일한 호감작임
C인가요?
C++ 이에용