이번시간에는 지금까지 배운 객체지향 지식과 클래스를 활용하여 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를 다른사람의 코드를 보지않고 직접 구현해보자!