참조 형식 멤버 초기화

개발자 동찬 ㅣ 2022. 9. 24. 23:51

클래스의 맴버 변수는 참조 형식으로 선언할 수 있다.

 

참초자는 반드시 선언과 동시에 초기화 해야한다. 기억할 것

 

참조형 멤버는 반드시 생성자 초기화 목록을 이용하여 초기화 한다.

 

 

#include <iostream>
using namespace std;

class CRefTest
{

public :

//참조형 멤버는 반드시 생성자 목록을 이용하여 초기화

CRefTest(int &rParam) : m_nData(rParam) { };



//CRefTest( int rParam) : m_nData(rParam) { };

//이 코드는 선언과 정의가 아니다. 인스턴스를 이용하여 연산한 것에 불과

//함수의 매개변수는 함수 내부의 자동 변수와 같으므로 함수가 반환될 때 매개변수는 소멸

// 따라서 m_nData(rParam)는 사라질 대상에 대한 참조자가 초기화 되는 결과를 초래함

// 출력결과는 쓰레기값을 출력하게 됨



int GetData(void) { return m_nData; }



private:

//참조형 멤버는 객체가 생성될 때 반드시 초기화 해야함

int &m_nData;

};

int main() {

int a =  10;

CRefTest t(a);     //t 객체를 a로 초기화 함 , 선언과 동시에 초기화

cout << t.GetData() << endl;

a = 20;

cout << t.GetData() << endl;

return 0;
}

출력결과 : 

10

20

 

참조형 맴버 변수로 객체를 초기화 하였기 때문에

a의 값이 바뀌면 함수 반환값이 같이 바뀌어진다.

'자바' 카테고리의 다른 글

Java - 객체지향 - 캡슐화  (0) 2023.12.10
Java - 객체지향 - 상속  (1) 2023.12.10
Java - 객체 지향 개요  (0) 2023.12.10
생성자와 소멸자  (2) 2022.09.20
접근 제어 지시자  (0) 2022.09.19