클래스 (2)

Yama·2023년 12월 21일
0

어소트락 수업

목록 보기
21/55

연산자 오버로딩

  • 추가로 더 가져왔다, 더 날랐다.

문자열 관리 전용 클래스 만들기

#include <iostream>

// 2
class String
{
private:
	char* 	m_pStr;			// 2
	int		m_MaxLength;	// 3
    int		m_Length;		// 4

public:
	int Length()
	{
		return m_Length;
	}
	const char* GetStr()
	{
		return m_pStr;
	}

public:
	String()
		: m_pStr(nullptr)
		, m_MaxLength(10)
		, m_Length(0)
	{
		m_pStr = (char*)malloc(sizeof(char) * (m_MaxLength + 1)); // 5
	}
	~String()
	{
		if (nullptr != m_pStr)
		{
			free(m_pStr);
		}
	}
};

int main()
{
	String str; // 1

	return 0;
}
  • // 1은 내가 저장한 문자열 관리 전용 클래스다.
  • // 2는 문자열의 주소
  • // 3는 문자열을 저장할 수 있는 최대 길이
  • // 4는 문자열의 길이
  • // 5는 (m_MaxLenght + 1)의 +1은 널문자는 표시는 안하지만 널 문자를 저장할 공간을 하나 더 부여한다는 의미의 + 1이다.

문자열을 연산자 오버로딩을 통해 연산자 구현하는 이유

int main()
{
	String str;

	const char* pStr = "abcdef"; // 1

	str = "abcdef"; // 2

	return 0;
}
  • 내가 만든 자료형에 const char* 타입 값을 대입한다.(기존의 대입이 아님)
  • // 2 오류 발생
    • 문자열의 대입 연산은 구현이 안되있다.
	String str1;
	String str2;
	String str3 = str1 + str2; // 오류 사진.

  • 저위의 수식이 기본 자료형이면 말이 잘되는거다.(int끼리의 덧셈 컴파일러 구현)
  • 내가 만든 자료형끼리의 덧셈은 구현이 안되어 있다.
    • 더하기 함수를 오버로딩을 통해 구현을 해줘야함.

문자열 대입, 덧셈, += 연산자 기본 틀 구현.

#include <iostream>

class String
{
private:
	char* 	m_pStr;			
	int		m_MaxLength;	
	int		m_Length;	

public:
	int Length()
	{
		return m_Length;
	}
	const char* GetStr()
	{
		return m_pStr;
	}
 
public:
	void operator = (const char* _str) // 1
	{

	}
    
    String operator+ (String _string) // 2
	{
		this;
		return String();
	}
    
    void operator += (const char* _Str) // 3
	{

	}


public:
	String()
		: m_pStr(nullptr)
		, m_MaxLength(10)
		, m_Length(0)
	{
		m_pStr = (char*)malloc(sizeof(char) * (m_MaxLength + 1));
	}

	~String()
	{
		if (nullptr != m_pStr)
		{
			free(m_pStr);
		}
	}
};


int main()
{
	String str; 


	str = "abcdef"; // 4

	// 2.4
	str.String::operator=("abcdef"); 	// 5
	str = "abcdef";  					// 6

	String str1;
	String str2;
	String str3 = str1 + str2;  						// 7
    String str3 = str1.String::operator+ (str2); 		// 8

	String s1;
	s1 = "abcd";

	String s2;
	s2 = "efgh";

	String s3;
	s3 = s1 + s2; 							// 9
    s3 = s1.String::operator+ (s2); 		// 10
	s3 += "hijkl"; 							// 11	
    s3.String::operator+= ("hijkl"); 		// 12
	return 0;
}
  • 문자열 대입 연산자(=) 구현
    • // 1을 선언을 하면 // 4에서 오류가 나던게 해결이됨
    • // 5, 6는 동일한 것인데 연산자를 표시하고 있는것이다.
  • 문자열 덧셈 연산자 구현
    • // 2를 선언을 하면 // 7 오류 해결됨.
    • // 7, 8은 같은것.
  • 문자열 += 연산자 구현
    • // 3을 선언을 하면 // 11,12 오류 해결됨
    • // 9,10은 같은것 ,// 11, 12은 같은것.

강의 코드

main.cpp

#include <iostream>

class String
{
private:
	char* 	m_pStr;		
	int		m_MaxLength;	
	int		m_Length;		

public:
	int Length()
	{
		return m_Length;
	}

	const char* GetStr()
	{
		return m_pStr;
	}

public:
	void operator = (const char* _str)
	{

	}

	String operator+ (String _string)
	{
		return String();
	}

	void operator +=(const char* _Str)
	{

	}




public:
	String()
		: m_pStr(nullptr)
		, m_MaxLength(10)
		, m_Length(0)
	{
		m_pStr = (char*)malloc(sizeof(char) * (m_MaxLength + 1));
	}

	~String()
	{
		if (nullptr != m_pStr)
			free(m_pStr);
	}
};



int main()
{
	String str;

	// str.String::operator=("abcdef");
	str = "abcdef";

	String str1;
	String str2;
	String str3 = str1 + str2; //str1.String::operator+(str2);

	int a = 0;
	a = 10;



	String s1;
	s1 = "abcd";


	String s2;
	s2 = "efgh";

	String s3;
	s3 = s1 + s2;
	s3 += "hijkl";



	return 0;
}

1차 23.12.21
2차 23.12.22
3차 23.12.25
4차 23.12.26
5차 23.12.27
6차 24.01.02

0개의 댓글