1 minute read

C++ 정리 4 ( 클래스와 객체 (2))

지난 시간에 이어서 생성자를 정리하도록 하겠습니다.

객체 생성, 생성자 실행

다음 코드를 한번 보겠습니다. 명품 c++ 프로그래밍 책에 있는 내용을 참고 하였습니다.

#include

using namespace std;

class Circle {

public:

int radius;

Circle(); // 기본 생성자

Circle(int r); // 매개 변수 있는 생성자

double getArea();

};

Circle::Circle() {

radius = 1;

cout « “반지름 “ « radius « ” 원 생성” « endl;

}

Circle::Circle(int r) {

radius = r;

cout « “반지름 “ « radius « ” 원 생성” « endl;

}

double Circle::getArea() {

return 3.14radiusradius;

}

int main() {

Circle donut; // 매개 변수 없는 생성자 호출

double area = donut.getArea();

cout « “donut 면적은 “ « area « endl;

Circle pizza(30); // 매개 변수 있는 생성자 호출. 30이 r에 전달

area = pizza.getArea();

cout « “pizza 면적은 “ « area « endl;

}

이렇게 작성된 코드는 2개의 생성자를 가지고 있습니다. 하나는 기본 생성자이고 하나는 매개 변수 있는 생성자 입니다.

매개 변수를 없이 생성자를 호출하면 기본 생성자가 호출이 되며 기본 생성자 안에 있는 내용이 실행이 됩니다.

매개 변수를 이용해서 생성자를 호출하면 매개 변수 있는 생성자가 호출이 되며 그 생성자 안에 있는 내용이 실행이 됩니다.


멤버 변수 초기화

멤버 변수들은 자동으로 초기화 되지 않습니다 그래서 생성자를 사용해서 멤버 변수들을 초기화 해주어야 합니다.

다음 코드를 보겠습니다.

​ class Point {

​ int x, y;

​ public:

​ Point();

​ Point(int a,int b);

​ };

​ Point::Point() { x = 0; y = 0;}

​ Point::Point(int a, int b) { x = a; y = b;}

이 코드와 같이 생성자를 이용해서 생성자가 생성될때 멤버 변수를 초기화할 수 있습니다.

하지만 이것보다 효율적인 방법이 있다. 위에 코드는 멤버 변수를 생성하고 이후에 초기화를 시키는 방식입다.

다음의 방법을 쓴다면 멤버 변수를 생성하는 동시에 초기화를 시켜줄 수 있습니다.

​ Point::Point() : x(0), y(0) { }

​ Point::Point(int a, int b) : x(a), y(b) { }

수업을 들을 때도 처음에 교수님이 이렇게 코드를 작성하시길래 무슨 내용인지 이해가 안갔는데 책을 찾아보고 구글링을 해보면서 효율적인 초기화 방법이라는 것을 알게 되었습니다.

생성자가 선언 되지 않았을때는 기본 생성자가 실행됩니다.

이렇게 생성자 정리를 마치고 다음 시간에는 소멸자를 정리해 보겠습니다.

Updated: