class Object{
const int c;
int &r;
public:
Object(int n, int& x){
// 상수와 참조 변수는 반드시 초기화하여 사용하여야 한다.
// 하지만 이 경우는 객체를 생성 후 초기화하는 방법이다.
// 그렇기 때문에 틀린 방법
c=n;
r=x;
}
Object(int n, int& x) : c{n},r{x} // 이게 맞는 표현
{}
}
객체를 생성하면 모든 멤버 데이터의 생성자도 호출된다.
class Rect{
Point leftTop; // Point의 경우 디폴트 생성자가 없다고 가정하자
Point rightBottom;
public:
Rect(int x1,int y1, int x2, int y2) : leftTop{x1,y1},rightBottom(x2,y2)
{}// 이렇게 해주어야 함
}
class Point{
public:
int x;
int y;
Point():y{10}, x{y} {}
// 이 경우 에러 발생. x=y, y=10 이 순서대로 실행 됨
}
class Point{
public:
int y;
int x;
Point():y{10}, x{y} {}
// 이 경우 해결. 멤버 데이터 선언 순서만 변경
}
vector<int> v(10); // 크기가 10개인 vector
vector<int> v{10}; // 크기가 한개, 초기값이 10인 vector