프로그래밍

C++ 참조자

c++ 기본서 보다가 참조자가 은근 어려운 스킬이 좀 많아서 후반부로 들어가니깐 좀 골치아픈데요

 

class Rectangle_1
{
private :
    Point UL;
    Point DR;
public :
    bool InitMembers(Point& ul, Point& dr);
    void ShowInfo();
};

 

 

class Rectangle_2
{
private :
    Point &UL;
    Point &DR;
public :
    bool InitMembers(Point& ul, Point& dr);
    void ShowInfo();
};

 

[main 함수]

Point pos1 = {10,2};

Point pos2 = {10,2};

 

Rectangle_1 sample1;

sample1.InitMembers(pos1, pos2);

 

Rectangle_2 sample2;

sample2.InitMembers(pos1, pos2);

 

------------------

 

class Rectangle_1과 class Rectangle_2 차이는 밑 줄 그어진 멤버 변수만 있는데 궁금한건 class Rectangle_1과 class Rectangle_2의 차이점이

class Rectangle_1은 ul, dr은 pos1, pos2와 동일한 주소인데 멤버변수 UL, DR는 주소가 다른거임?

 

그럼 class Rectangle_1  pos1, pos2와 ul, dr, UL, DR 모두 동일한 주소인가요?

 

아 은근 헷갈림....

10개의 댓글

lsp
2021.12.06

음 이거 컴파일 안될거 같은뎅

0
2021.12.06
@lsp

예시로 만든건데 이론은 맞나요?

0
lsp
2021.12.06
@클로로프렌

아마 Rectangle2는 레퍼런스니까 동일한 주소고, Rectangle1은 다른 주소일거에요.

제가 알기로 이게 컴파일이 안되는게 레퍼런스로 변수 만들면 생성시 초기화가 필요할듯요.

0
@lsp

initializer로 초기값 잡으면 가능하지 않으려나?

0
lsp
2021.12.06
@느그본체만수무강

그래서 생성시 초기화 필요하다구 썼음

0
2021.12.06
@lsp

헤더파일 글거온거라 이니셜라이저 생략했어요

0
2021.12.06
@느그본체만수무강

ㅇㅇ 참조자면 이니셜라이저로 해야 하는데 헤더 파일에는 이니셜라이저 안 써도 되겠지하거 대충 넘긴거임 ㅇㅇ

0
2021.12.07

간단하게 아래 같은 경우를 생각해보면

int a = 0;

int& b = a;

int c = b;

b는 a의 주소를 갖고있고, c는 b 주소에 있는 값을 복사한거임.

b에 값을 대입하면 a가 바뀌고(c는 그대로), c에 값을 대입하면 c만 바뀜.

그러니까 pos1, pos2와 Rectangle_1 의 ul, dr은 주소가 같고, UL, DR 은 주소가 다름.

0
2021.12.07
@LAMP

흠 쉽게 생각하면 참조자를 사용해서 이미 객체 생성된거를 또 생성되는 걸 방지하는 건가요?

 

또한 매개변수이 const int &a이거는 상수,변수를 받기 위함이라고 하는데

 

int &a로 받으면 상수를 못받나요? 이거 좀 어렵네요...

0
2021.12.07
@클로로프렌

InitMembers 함수가 참조변수로 인자를 받는 이유는, 주소를 인자로 전달받는 것의 흔한 이점인 효율적인 메모리 사용을 위한 거라고 생각되네요.

그리고 const int i 라는 변수가 있다면, const int &a = i 는 가능하지만, int &a = i 는 안됩니다. 그냥 문법적인 내용이죠.

0
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180460 [컴퓨터] 선생님들 혜안을 구합니다 6 빠른인정빌런 0 29 분 전 24
180459 [모바일] 당근으로 갤럭시탭 s9 울트라 사기로했는데 말이야방구야 0 37 분 전 34
180458 [모바일] 갤럭시 동영상 자르기 안되는 이유 아시는분?? 2 일토준지 0 51 분 전 27
180457 [프로그래밍] 코린이 ㅅㅂ 뭐가 문젠지 모르겠어요 집에가게해줘 0 2 시간 전 116
180456 [컴퓨터] 해피해킹 키보드 회사서 못 쓰는 이유 1 닉네임변경후13일차 0 2 시간 전 160
180455 [컴퓨터] 컴 바꿧듬 10 탑똥 1 2 시간 전 92
180454 [컴퓨터] CPU 불량이 맞는가!? 10 꺄꺄룽 0 3 시간 전 121
180453 [정보] 최근에 꽤 핫했던 레노버 y700 2세대 정보 모음입니다. 9 SeraMint 2 3 시간 전 131
180452 [잡담] 님들 컴터 조립할 때 ㅈ같았던 경험들 있음? 3 UBCS 0 3 시간 전 90
180451 [컴퓨터] LG OLED티비쓰는데 HDMI로 컴연결해서 쓰거든 11 뚱땡보 0 4 시간 전 79
180450 [잡담] DDR5 삼성 시금치램에 방열판 달고싶은데 10 내일까지 0 4 시간 전 98
180449 [컴퓨터] 3.5mm 헤드셋을 연결했는데 마이크에서 스피커소리가 나옴..... 12 아건 0 5 시간 전 80
180448 [컴퓨터] 모니터 화이트스크린 심심할땐개드립 0 6 시간 전 36
180447 [모바일] 유튜브 뮤직 왜 안되는지 아는 사람?? 8 티탄즈 0 6 시간 전 115
180446 [컴퓨터] 10년된 컴터 이제 보내주려하는데 이거 살만한가여? 12 응가쌀땐폰필수 0 8 시간 전 149
180445 [컴퓨터] 맥북 중고로 사려는데 이거 가격 얼마가 적당해??? 3 갈비찜존맛 0 8 시간 전 105
180444 [프로그래밍] Dear Imgui 라고 아시나요? 2 년째모쏠 0 9 시간 전 122
180443 [컴퓨터] 컴맹 노트북에 ssd추가 장착 질문점 4 바퀴 0 15 시간 전 134
180442 [컴퓨터] 윈도우 설치 후에 쓰던 디스크를 추가설치하려는데 15 드웨인토마스 0 20 시간 전 164
180441 [컴퓨터] 램 16기가인데 왜이러는지 모르겠어요 15 파워불곰이 0 20 시간 전 410