컴공 일기259
게시글 주소: https://wwww.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를 선물하세요.
-
내신 1점후반에 필수과목 1등급인데 다른 사람들은 대부분 필수과목 미이수라면 aa 가능성 있을까요
-
서울대 대체서식 잘쓰면 bb는 받을수있나요? ㅠㅠ
-
근처 무인 프린트카페에서 하시나요? 금액이 면당 100원이네요 ㄷㄷ 200페이지...
-
이유는 저를 불합격 시킨 대학교이기 때문입니다.
-
라면먹고싶다 5
근데 너무 늦었어
-
월급루팡 ㄹㅈㄷ
-
군수해서 원하는과 가는것보다 전과가 현실적으로 가능성 있어보여서 전과 노려보려고
-
1학년 아예 안나기서 학고받았는데 그냥 자퇴하고 다니던 학과 다시 원서 넣어서 들어가도돼요??
-
나군 경한 앞표본이 굳건하네요 떨어지면 가천한 가면 된다 마인드인지라 전에는...
-
현강 굳이 안가고 인강으로만 기출코드 듣고 정병호나 김범준 들으려는데 기출을 제대로...
-
빈수레가 요란함 + 1편 뛰어넘는 2편 없음 근들갑 떨때부터 불안했는데 이건...
-
숭실대 회계학과 입학해서 cpa 트라이 VS 건대 어문이나 사과계 입학해서 cpa...
-
하…
-
내가 대학 들어와서 뭐해서 벌고 살지 반수 실패하면 뭐해서 벌고 살지 반수 성공하면...
-
피램 생각의 전개 문학 독서 둘 다 하시는 분들 계시나요?? 0
문학 원데이 독서 원데이 이렇게 매일 같이 하시나요?
-
반수할 건데 올해 수특 나오기 전에 한 번 더 풀어야 되나
-
과외알바를 생각하시는 분들을 위한 매뉴얼&팁입니다. 미리 하나 장만해두세요~~...
-
근로계약서 쓰자고 해도 계속 미루고 돈 안떼먹는다 서운하다 이런식으로 반응해오길래...
-
한티,신논현,강남,서울,신사,디지털구로,왕십리,디지털미디어시티 아닙니다
-
반대로 생각하면 폭발할까봐 무서워 ㅠㅠ
-
서울대를 목표로 해야 그 밑인 연고라도 갈 수 있으려나.. 저희 부모님이 항상 하시는 말씀인데
-
표본분석 0
표본분석 해서 내 앞에서 빠져나갈사람 예측하는거잖아요 근데 표본이 안차서 앞애...
-
제가 재수 끝나고 문항공모 작업이랑 과외 구하는 거 말고는 11시 기상- 게임-...
-
https://orbi.kr/00070866534/ 이런 식으로 써 볼 수도 있고...
-
적어도 갈려고 하는 과에서 뭘 배우는지는 알아보세요 1
그거 안하고 그냥 생각없이 붙은 데 가면 후회합니다
-
1후~2초정도인가
-
아 턱 아파 4
흑흑
-
성균관대 자유전공 전기전자 소프트웨어학부 한양대 인터칼리지 융합전자공학부 화공...
-
서울대 cc인가요?
-
군수 질문 0
육군 군수에 대해서 잘 아시는 분 부탁드려요.. 23 9평 국수영생지 51114...
-
걍 저 역은 누가 했어도 연기력으로 욕 먹을 자린것같은데 걍 저 역 자체가 존나 오글거림
-
국물이 시원해서 그럼 아무튼 그럼
-
다시 떠올려보려 하니까 내용은 하나도 기억이 안나고 재밌게 봤다는 그 생각밖에...
-
제가 며칠 전 조모상 때문에 수시 넣은 걸 최초합 이후로 확인할 겨를이 없었습니다....
-
진학사 6칸 0
현재까지 리포트에서 계속 최초합 6칸이었으면 붙는다고 봐도 될까요 과는 지방 약대...
-
상의 위에 검정 티셔츠 입고 밑 사진처럼 상의 오버핏 검정 블레이저 밑은 와이드...
-
두팀이 폭파된다는 얘기가 있다 난 한팀만 폭파될거라는 얘기를 더 좋아한다
-
맛있어
-
김승리 커리 5
이제 고3 학생입니다. 김승리 커리를 탈려하는데 2026 올오카 강의가 아직 하나도...
-
만약 3월 27일쯤 제대하면 그냥 일년쉬어야하는거에요..?
-
이거에 꽂힘
-
심찬우쌤 교재가 전년도랑 많이 바뀌나요?? (생글, 생감, 에필로그, 기출테마)...
-
반값인데
-
바로 폭당하네…며칠전 높5=>지금 아슬아슬5인데 4칸 바로될듯 ㅋㅋ
-
뭔가 어딘가에 하자있음
-
스스로에게 만족하는 순간이 올까봐 무서워요 뭔가 원동력을 잃게 될 거 같아요
-
확통스러운 케이스분류를 통한 수학 2 준킬러를 만들어봤습니다 아까 확통 문제가...
-
단국대식 인재인데 진짜로 나는 내년에 단국대가 인원이 반토막남.. 올해 못가면 진짜...
-
ㅅㅂ 아칼리 드간다
C인가요?
C++ 이에용