프로그래밍

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
무분별한 사용은 차단될 수 있습니다.
번호 제목 글쓴이 추천 수 날짜 조회 수
180472 [잡담] 좆데온 8천번대보다 7900xtx가 전기모기채는신이야 0 33 분 전 28
180471 [컴퓨터] 형님들 견적짠거 호환 문제없는지 확인 부탁드립니다 1 우루루옳지 0 40 분 전 17
180470 [정보] 크러쉬80 - 레이니75를 만든 Wob의 텐키리스 키보드 Veigrake 0 1 시간 전 57
180469 [잡담] 여기 로봇 청소기도 물어봐도 됨?? 6 년째재수강 0 2 시간 전 72
180468 [잡담] 윈도우12 전부 레거시쳐낸다는말이 하드웨어를 말한거구나 3 이거보인다면기분탓임 0 2 시간 전 151
180467 [컴퓨터] 갤럭시80 넘나 이쁜것이예요 2 군마 1 5 시간 전 246
180466 [모바일] 차량용 맥세이프 충전기 탁상용으로 쓰니 좋다 4 년째군대 0 5 시간 전 148
180465 [잡담] 채터링 어캐잡습니까... 5 로우팡맨 0 6 시간 전 149
180464 [잡담] 4월에 마우스 큰 게 두 개 나오네 4 GNStout 0 6 시간 전 184
180463 [컴퓨터] 무선 키보드 마우스 세트는 별로인가? 3 하이웨이 0 6 시간 전 95
180462 [컴퓨터] 10만원대 포터블 모니터는 사는거 아니더라 12 코싸멘뚜 0 6 시간 전 165
180461 [정보] 레이니75 저격하는 브릿지75 18 Veigrake 0 8 시간 전 242
180460 [모바일] 새 애플펜슬 나오면 기존 제품들 가격내려가? 5 II바II코II드II 0 11 시간 전 210
180459 [잡담] 드디어 왔다 레이니 5 ltearl 0 19 시간 전 280
180458 [프로그래밍] 그 혹시 게임쪽 종사자 있음? 16 god79ii 0 19 시간 전 394
180457 [컴퓨터] sata 케이블때문에 ssd가 망가질 수도 있나요? 9 드웨인토마스 0 20 시간 전 303
180456 [모바일] 횽들 어거좀 봐줘 6 부자가될개붕이놈들 0 1 일 전 185
180455 [컴퓨터] 선생님들 혜안을 구합니다 9 빠른인정빌런 0 1 일 전 169
180454 [모바일] 당근으로 갤럭시탭 s9 울트라 사기로했는데 2 말이야방구야 1 1 일 전 285
180453 [모바일] 갤럭시 동영상 자르기 안되는 이유 아시는분?? 3 일토준지 0 1 일 전 151