#220729~
#220802~ 이어서
#define XX 1 //컴파일 전에 xx를 찾아서 1로 바꿈
int main()
{
const int x = 2; //변수 x 는 항상 1, 변경불가
int const y = 3; //비추, const는 항상 자료형 앞에 씀
const int z{4}; //Uniform initialization
constexpr int a = 5; //c++11부터 가능, compile-time constant
std::cout << XX << " " << x << " " << y << " " << z << " " << a << "" << std::endl;
return 0;
}
// 결과값 => 1 2 3 4 5
void fun(void) const;
: 함수가 const, 멤버변수를 변경하지 않는 함수
const형 멤버함수는 멤버변수를 변경하는 치환을 연산할 수 없음.
const로 지정된 함수에서는 멤버변수의 값을 변경할 수 없다.
const 함수는 const 함수만 호출할 수 있으며 일반 멤버함수에는 접근할 수 없다.
생성자와 소멸자에서는 const를 사용할 수 없다.
const형을 추가선언하고자 하면 멤버변수는 형 앞에 const를, 멤버함수는 함수의 괄호 다음에 const를 추가한다.
int getAge()const
{
return age;
}
// const형 멤버함수
class Dog{
int age;
public:
int getAge() const;
void setAge(int a){age=a;}
// getAge()가 const라서 view()도 const여야 함수 호출 가능
void view() const {std::cout << "나는 view" << std::endl;}
};
int Dog::getAge() const
{
view(); //const 멤버함수는 const 함수만 호출할 수 있고, 일반함수를 호출할 수 없다. 여기서 view가 const라면 가능
// return(++age); //const 멤버함수에서는 멤버변수 age를 변경할 수 없다, age 그대로는 가능
return age; //값 변경없이 출력하는 것은 가능
}
int main()
{
Dog happy;
happy.setAge(5);
std::cout << happy.getAge()<< std::endl;
return 0;
}
✓ const 객체
int main(void)
{
int x = 10, y;
int* px; //선언문, 포인터 px 선언
px = &x; //포인터 px에 x의 주소 대입
y = *px; //실행문, px의 주소로 가서 값을 가져옴
std::cout << x << " " << std::endl;
std::cout << sizeof(x) << std::endl; // x의 사이즈는 4바이트 (int형)
std::cout << px << " " << &px << " " << *px << std::endl; // x의 주소값, &px의 주소값, y의값
std::cout << y << " " << &y << " " << std::endl; // y의 값, y의 주소값
return 0;
}
-- 지역/전역 변수는 변수의 '선언 위치'에 따라서 결정됨
함수(main()) 안에서 선언하면 지역, 함수 밖에서 선언하면 전역
void show(void);
int x; //전역 변수
//데이터 영역에 저장
int main(void)
{
int y; //지역변수
//스택에 저장
}
void show(void)
{
int z; //지역변수
}
✭ 전역 변수는 함수 밖에서 선언하며, 프로그램의 모든 부분에서 사용 가능
✭ 데이터 영역을 사용하며 프로그램 실행이 종료될 떄까지 값 유지
✭ 지역변수와 중복해서 선언되어 있으면 지역변수값이 우선임
void show1(void);
void show2(void);
//전역변수 (실행시 한번만 초기화하고 초깃값이 주어지지 않으면 0으로 자동 초기화)
int x;
int main(void)
{
// main()에서 x:0
std::cout << "main()에서 x:" << x << std::endl;
// show1()에서 x:1
show1();
// show1()호출 후 x:1
std::cout << "show1()호출 후 x:" << x << std::endl;
//show2()에서 x:10
show2();
//show2()호출 후 x:1
std::cout << "show2()호출 후 x:" << x << std::endl;
//show2()에서 x:10
show2();
return 0;
}
void show1(void)
{
std::cout << "show1()에서 x: " << ++x << std::endl;
}
v
void show2(void)
{
int x =10; //지역변수
std::cout << "show2()에서 x:" << x << std::endl;
}