생성자
#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 |