[C++] 객체 포인터

KWANHO PARK·2025년 4월 19일

CPP

목록 보기
18/24
/*
	객체 포인터
*/
#include <iostream>

class MyClass {
public:
	void showMyClass() {
		std::cout << "Hello World!" << std::endl;
	}
};

int main()
{
	MyClass obj;
	MyClass* ptr;		// MyClass 타입의 객체 포인터 선언
	ptr = &obj;
	
	ptr->showMyClass();
	return 0;
}

/*
	객체 동적 생성
*/
#include <iostream>

class AClass {
public:
	void showAClass() {
		std::cout << "Dynamically created Object" << std::endl;
	}
};

int main()
{

	AClass* ptr = new AClass{ };		// 객체 동적 할당
	ptr->showAClass();

	delete ptr;						// 동적 메모리 해제
	return 0;
}

/*
	
*/
#include <iostream>

class MyClass {
public:
	int value;
	MyClass(int v = 0) : value(v) {

	}
	void showMyClass() {
		std::cout << "value: " << value << std::endl;
	}
};

int main()
{
	MyClass* ptr = new MyClass{ 10 };
	ptr->showMyClass();
	printf("value: %d\n", ptr->value);

	delete ptr;

	MyClass obj{};
	ptr = &obj;

	ptr->showMyClass();
	(*ptr).showMyClass();
	printf("value: %d\n", (*ptr).value);

	return 0;
}

#include <iostream>

class MyClass {
public:
	void show() {
		std::cout << "Hello!" << std::endl;
	}
};

int main()
{
	MyClass* ptr = nullptr;
	//printf("ptr: %p\n", ptr);
	if (ptr != nullptr) {
		ptr->show();
	}
	else {
		printf("ptr is NULL\n");
	}

	ptr = new MyClass{};
	printf("ptr: %p\n", ptr);
	ptr->show();

	return 0;
}

/*
	상속에서 객체 포인터
	부모타입의 포인터로 자식타입 객체를 가리키면 자식 타입의 객체가 부모 타입의 객체로 변환(Upcasting)
*/
#include <iostream>

class Base {
public:
	void show() {
		printf("Base Class\n");
	}
};

class Derived : public Base {
public:
	void show() {
		printf("Derived Class\n");		// 오버라이딩(재정의)
	}
};

int main()
{
	Base* bptr = nullptr;
	Derived* dptr = nullptr;

	Derived obj;	// 파생클래스 객체
	dptr = &obj;
	dptr->show();

	bptr = &obj;	// 부모타입의 포인터로 자식타입의 객체를 가리킴.
	bptr->show();	// Base Class 출력
	//bptr->Derived::show();
	
	return 0;
}

/*
	자식 포인터로 부모 객체를 가리킬(다운캐스팅) 수 없음
*/
#include <iostream>

class Base {
public:
	void show() {
		printf("Base Class");
	}
};

class Derived : public Base {
public:
	void show() {
		printf("Derived Class");
	}
};

int main()
{
	Base bobj;
	Derived* dptr = nullptr;
	//dptr = &bobj;
	/*dptr = (Base*)& bobj;
	dptr->show();*/

	dptr = (Derived*)&bobj;
	dptr->show();
	return 0;
}

0개의 댓글