본문 바로가기
프로그래밍/C++

객체 레퍼런스

by 리뷰하는 (게임)프로그래머_리프TV 2010. 4. 3.




객체 포인터와 큰 차이는 없다.

객체 포인터 처럼 ClassA의 레퍼런스는 ClassA 객체뿐만 아니라 ClassA 클래스를 상속하는 하위 클래스 객체도 참조가 가능하다.

라고 보면 된다.

말이 어렵지만 소스를 보면 크게 어렵지 않다.

#include <iostream>

class A
{
public:
	void showData(){ std::cout << "calss A showData()" << std::endl;}
	virtual void showVirtualData(){ std::cout << "class AshowVirtualData()" << std::endl;}
};

class B : public A
{
public:
	void showData(){ std::cout << "class B showData()" << std::endl; }
	virtual void showVirtualData(){ std::cout << "class B showVirtualData()" << std::endl;}
};

class C : public B
{
public:
	void showData(){ std::cout << "class C showData()" << std::endl; }
	virtual void showVirtualData(){ std::cout << "class C showVirtualData()" << std::endl;}
};

void main()
{
	// class C 객체의 cc라는 인스턴스 생성,
	C cc;
	// class B 객체 레퍼런스에 cc를 넣어 주고 있다.
	B& rb = cc;
	// Class A 객체 레퍼런스에 cc를 넣어 주고 있다.
	A& ra = cc;

	// 자신이 가르킬 수 있는 레퍼런스 만큼만 가르키게 된다.
	cc.showData();	
	rb.showData();
	ra.showData();

	// virtual을 사용하면 최 하위 클래스의 함수를 사용 가능.
	cc.showVirtualData();
	rb.showVirtualData();
	ra.showVirtualData();

	// 결과
	// class C showData()
	// class B showData()
	// class A showData()
	// class C showVirtualData()
	// class C showVirtualData()
	// class C showVirtualData()
}​


객체 포인터가 최상위 객체 포인터를 통해 하위를 받는다면,
이번엔 최 하위 객체 레퍼런스를 통해 상위 클래스에 오버라이딩 전 함수를 사용하기 위함으로 쓰면 좋지 않을까?
하는 생각을 조심스레 해본다.

'프로그래밍 > C++' 카테고리의 다른 글

virtual(가상)  (0) 2010.04.03
함수 오버라이딩(overriding)  (0) 2010.04.03
객체 포인터  (2) 2010.03.29
IS-A, HAS-A 관계  (1) 2010.03.27
상속의 형태  (0) 2010.03.26