Search

LV12 string 클래스 구현해보기

이번시간에는 지금까지 배운 객체지향 지식과 클래스를 활용하여 std::string 클래스를
비슷하게 설계 해보도록 하겠다.
예제와 다르게 실제로는 구현할것이 굉장히 많지만 한번에 많은내용을 학습하게 되면 오히려
기억에 안남기 떄문에 간단하게 생성자 정도와 +=연산자를 구현해보면 된다.
namespace jm { class string { public: string(const char* str) { mSize = strlen(str); mCapacity = (mSize * 2) + mSize; mStr = new char[mCapacity]; memset(mStr, 0, mCapacity); memcpy(mStr, str, mSize + 1); } void operator+= (const char* str) { int len = strlen(str); int newSize = mSize + len; if (newSize >= mCapacity) { mCapacity = (newSize * 2) + newSize; char* newStr = new char[mCapacity]; memset(newStr, 0, mCapacity); memcpy(newStr, mStr, mSize); delete[] mStr; mStr = nullptr; mStr = newStr; } memcpy(mStr + mSize/*&mStr[mSize]*/, str, len + 1); } char& operator[] (int index) { return mStr[index]; } int Size() const { return mSize; } private: char* mStr; int mSize; int mCapacity; }; } int main() { std::string strA("Hello"); int len = strA.length(); strA += " World"; std::cout << strA[4]; jm::string strB("Hello"); strB += " World~~~~~~~~~"; strB[4] = 'a'; return 0; }
C++
복사

숙제

] string 클래스 3번정도 디버깅 해보기 (따라서 지워서 치고)
그리고 다지운후에 코드 보지않고 직접 구현해보기 동적할당 링크드 리스트 함수화문제 전부 st:d::list , std::string을 이용해서 전부 다시풀기
(추가 숙제, 나중에 설명할것이다.) 위 예제가 잘 이해 되었다면 std::vector를 다른사람의 코드를 보지않고 직접 구현해보자!