안녕하세요 질문입니다
#pragma once
#include <string>
#include "Position2D.h"
class Monster
{
private:
std::string m_name; // char * data, unsigned length;
Position2D m_location;
//int m_x; // location
//int m_y;
public:
Monster(const std::string name_in, const Position2D & pos_in)
:m_name(name_in), m_location(pos_in)
{
}
//void moveTo(const int &x_target, const int &y_target)
//{
// m_x = x_target;
// m_y = y_target;
//}
void moveTo(const Position2D &pos_target)
{
//m_x = x_target;
//m_y = y_target;
m_location.set(pos_target);
}
friend std::ostream &operator << (std::ostream &out, Monster &monster)
{
out << monster.m_name << " " << monster.m_location << std::endl;
return out;
}
};
값 변경이 안되게 하는거 같은데 상수화하는것 같은데
moveTo 함수 내에서 파라미터로 const를 빼면 왜 안되는것인지 궁금합니다
operator << 함수에선 const 를 안붙여도 되는건가요?
그리고
#pragma once
#include <iostream>
class Position2D
{
private:
int m_x;
int m_y;
public:
Position2D(const int& x_in, const int & y_in)
:m_x(x_in), m_y(y_in)
{}
// TODO: overload operator =
void set(const Position2D & pos_target) // 파라미터 왜 const
{
set(pos_target.m_x, pos_target.m_y);
// m_x = pos_target.m_x;
// m_y = pos_target.m_y;
}
void set(const int &x_target, const int &y_target)
{
m_x = x_target;
m_y = y_target;
}
friend std::ostream &operator << (std::ostream &out, Position2D &Position2D)
{
out << Position2D.m_x << " " << Position2D.m_y << std::endl;
return out;
}
};
마찬가지로 여기선 operator << 함수에 파라미터중 Position2D에 const를 안붙여도되나요?
너무 헷갈리는데 어디부분을 복습해야할까요..
답변 1
3
"moveTo 함수 내에서 파라미터로 const를 빼면 왜 안되는것인지 궁금합니다
operator << 함수에선 const 를 안붙여도 되는건가요?"
👉 6단원 에서 배우셨을 "const 참조"는 R-value, L-value 모두 참조할 수 있습니다. const 떼고 그냥 참조로 하면 L-value 파라미터만 받을 수 있구요, const 붙이면 R-value 파라미터"도" 받을 수 있습니다. 그리고 수정이 불가능해지구요! 이런 차이를 고려해서 const 붙일지 안붙일지 결정하면 됩니다. 익명 객체같은건 R-value 이니 moveTo 는 파라미터로 익명 객체를 받을 수 있겠네요!
👉 출력 스트림에 출력할 내용을 집어넣으면서 출력 스트림 객체에 어떤 "변화"가 생기기 때문에 ostream 타입인 out 매개변수는 const 붙으면 안되구요(수정을 못하게되니까요), Position2D& Position2D 에는 객체 내용 수정 안할거라면 const 붙이든 안붙이든 상관없습니다. 위에서 설명드린대로 R-value 객체도 파라미터로 받게 할거라면 const 반드시 붙여야겠지만요!
"마찬가지로 여기선 operator << 함수에 파라미터중 Position2D에 const를 안붙여도되나요?"
👉 위에서 설명이 될 것 같네요.
변수가 메모리에 저장되는 것을 알려주는 강의가 어떤강의였죠
1
481
1
메모리 주소 10진수로 출력
1
672
1
클래스 템플릿 특수화에서 boolalpha로 표현된 리턴값에 대해 질문이 있습니다.
1
515
1
여러가지 리턴 타입에 관한 강의가 어떤 걸까요?
1
550
1
메모리 주소에 관한 질분
0
687
1
인터페이스 클래스에서 reportError의 매개변수에 대해 궁금한 것이 있습니다.
0
558
1
형변환 오버로딩에서 const 관련 질문이 있습니다.
0
448
1
Digit 뒤에 reference를 사용하는 이유
0
512
1
4.2 전역 변수, 정적 변수, 내부 연결, 외부 연결
0
325
1
dat파일이...
0
540
1
TODO:대입 연산자 오버로딩에 대한 소스코드입니다.
0
651
1
복사 생성자 관련 질문이 있습니다.
0
456
1
수업 중 궁금한점이 있습니다.
1
392
1
라이브러리자체가 이해가 되지 않습니다.
0
565
1
마지막 예제 질문
0
305
1
증감연산자 위치에 따른 수행 순서 질문입니다.
0
382
1
단항 연산자 오버로딩에서 return 부분에 질문이 있습니다.
1
416
1
friend함수 관련 질문이 있습니다.
0
313
1
operator+ 정의부분에서 궁금한 것이 있습니다.
0
448
1
3분 17초 질문
0
354
1
함수에 값을 대입한다는 개념이 이해가 되지 않습니다.
0
450
1
int getvalue() const에서 const는 왜 뒤에 붙는건가요?
0
453
2
const Something &st에서 const를 빼면 안되나요?
0
304
1
friend함수는 다른 클래스의 멤버함수로 쓸 수 없나요??
1
495
1





