[C++] 상속 예제

BananaCube·2023년 2월 10일
//메세지
//	텍스트
//	이미지

#include<iostream>
#include<string>

using namespace std;

class Message
{
public:
	Message(int iSendTime, string strSendName) {
		this->iSendTime = iSendTime;
		this->strSendName = strSendName;
	}

	int getISendTime() const { return iSendTime; }
	string getStrSendName() const { return strSendName; }
private:
	int iSendTime;
	string strSendName;
};

class Image
{
public:
	// 이미지 자체를 출력하는 것은 나중에... 일단 string으로 바꿔서 출력
	operator string() 
	{
		return "사진";
	}
};

class TextMessage : public Message
{
public:
	//TextMessage(int iSendTime, string strSendName, string strText)
	TextMessage(int iSendTime, string strSendName, string strText)
		: Message(iSendTime, strSendName)
	{
		//this->iSendTime = iSendTime;
		//this->strSendName = strSendName;
		this->strText = strText;
	}

	//int getISendTime() const { return iSendTime; }
	//string getStrSendName() const { return strSendName; }
	string getStrText() const { return strText; }

private:
	//int iSendTime;
	//string strSendName;
	string strText;
};

class ImageMessage : public Message
{
public:
	//ImageMessage(int iSendTime, string strSendName, Image* pImage)
	ImageMessage(int iSendTime, string strSendName, Image* pImage)
		: Message(iSendTime, strSendName)
	{
		//this->iSendTime = iSendTime;
		//this->strSendName = strSendName;
		this->pImage = pImage;	// Image 클래스 자체에 동적 메모리 할당된 것이 없으므로
	}							// delete가 두번 호출되지 않아서 얕은 복사가 가능하다는데 얕은 복사가 뭐야 ㅡ,.ㅡ

	//int getISendTime() const { return iSendTime; }
	//string getStrSendName() const { return strSendName; }
	Image* getPImage() const { return pImage; }

private:
	//int iSendTime;
	//string strSendName;
	Image* pImage;		// 이미지는 용량이 클 것이기 때문에 포인터로 이미지를 참조해오는 식으로 코딩한다.
};

int main()
{
	// 두들 : "안녕"
	// 두들 : "강아지 사진"
	Image* pImage = new Image();  // 이미지 자체는 객체로 안만들고 포인터 형태로 동적 할당을 한다. 생성자를 안만들었으므르로 기본 생성자를 적는다.
	TextMessage* pTextMessage = new TextMessage(10, "두들", "안녕");
	ImageMessage* pImageMessage = new ImageMessage(20, "두들", pImage);

	cout << "보낸 시간 : " << pTextMessage->getISendTime() << endl;
	cout << "보낸 사람 : " << pTextMessage->getStrSendName() << endl;
	cout << "편지 내용 : " << pTextMessage->getStrText() << endl;
	cout << endl;

	cout << "보낸 시간 : " << pImageMessage->getISendTime() << endl;
	cout << "보낸 사람 : " << pImageMessage->getStrSendName() << endl;
	cout << "편지 내용 : " << (string)*pImageMessage->getPImage() << endl;
	cout << "편지 주소 : " << pImageMessage->getPImage() << endl;
	cout << endl;

	// string strPpImageMessage = (string)*pImageMessage->getPImage() // 이렇게 되요??

	// 필요없어질 순서대로 delete
	delete pTextMessage;
	delete pImageMessage;
	delete pImage;

	return 0;
}
profile
C++ 독학한 내용을 정리하는 벨로그입니다.

0개의 댓글