생성자

#include <iostream>
using namespace std;

class Point{
    int x, y;

public:
    Point(int x=0, int y = 0) :x(x){ // x 앞에게 멤버변수, 뒤에게 배개변수 
        this -> y = y; // y도 앞에게 멤버변수, 뒤에게 매개변수
    }
    void print(){
        cout << "( " << x << ", " << y << " )";
    }
};

class Circle{
    Point center;
    int radius;
public:
    Circle(int r):center(0,0), radius(r){} // c2,
    Circle(Point p = Point(0,0), int r=0):center(p), radius(r){} // 기본 생성자, c1, c5
    Circle(int x, int y, int r= 0): center(x,y), radius(r){} // c3, c4
    void print(){
        center.print();
        cout << " : " << radius << endl;
    }
};


int main() {
  Point p(3,4);
  Circle c1; c1.print();
  Circle c2(2); c2.print();  
  Circle c3(-1, -2); c3.print();  
  Circle c4(4,5,1); c4.print();  
  Circle c5(p,5); c5.print();  
}

아무것도 안 넣어도 되는 기본 생성자가 21번 줄에있다.

center(int , int )를 받는 생성자는 8번라인 생성자를 통해 생성되지만,
center(Point) 포인트 객체를 매개변수로 받는 center생성자는 컴파일러에서 기본으로 만들어주는 복사 생성자를 통해 생성된다.

#include <iostream>
using namespace std;

int main() {
    const int one = 1;

    const int *i1 = &one; // i1은 const 선언된 int 포인터에 + 상수의 주소를 줌
    const int &i2 = one; // i2는 const 선언된 int reference + 상수의 이름을 줌

    // int *i3 = &one; // i3은 const 선언이 안 된 int 포인터 (변수 int 포인터) + 상수의 주소를 줌 // 이건 compile error
    // int &i4 = one; // i4는 const 선언이 안 된 int reference (변수 int 레퍼런스) + 상수의 이름을 줌 // 이건 compile error


    int two = 2;

    const int *k1 = &two; // k1 은 const 선언된 int 포인터 + 변수의 주소를 줌
    const int &k2 = two; // k2 는 const 선언된 int reference + 변수의 이름을 줌

    int *k3 = &two; // k3 은 const 선언 안된 int 포인터 (변수 int 포인터 ) + 변수의 주소를 줌
    // int *k4 = two; // int 포인터에 int를 넣을 수 없음 /// compile error

    // int &k5 = &two; // int에 int 포인터를 넣을 수 없음 /// compile error
    int &k6 = two; // k4는 const 선언 안된 int reference (변수 int reference) + 변수의 이름를 줌

    cout << "k1 : " << k1 << endl;
    cout << "k2 : " << k2 << endl;

    cout << "k3 : " << k3 << endl;
    cout << "k4 : " << k4 << endl;    

    cout << "k5 : " << k5 << endl;
    cout << "k6 : " << k6 << endl;

}

포인터와 레퍼런스는 실행해봐야한다.
left side 값에 * : 포인터 라는 뜻
left side 값에 & : reference 라는 뜻 ( 별명이라는 뜻 )

right side에 & : ~ 의 주소
right side에 * : 역참조 연산자. 주소를 받아서 값을 가져옴 (포인터에 받아서 이 주소를 역참조해서 값을 받겠다는 뜻)

'TIL > [C++ 프로그래밍} TIL' 카테고리의 다른 글

TIL 22.06.08 (시험에 나올만한..?)  (0) 2022.06.09
TIL (22.06.05)  (0) 2022.06.05
TIL (22.05.30)  (0) 2022.05.30
TIL (22.05.25)  (0) 2022.05.25
TIL (22.05.23)  (0) 2022.05.23