티스토리 뷰

4. 기본 생성자 삽입 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include<iostream>
#include<string>
#include<cstdlib>
 
using namespace std;
class Circle {
public:
    int radius;
    double getArea();
    Circle();
    Circle(int r);
};
Circle::Circle() {
    radius = 10;
    cout << "반지름이 " << radius << " 원 생성" << endl;
}
Circle::Circle(int r) {
    radius = r;
    cout << "반지름이 " << radius << "원 생성" << endl;
}
 
double Circle:: getArea() {
    return 3.14 * radius * radius;
}
 
int main() {
    //pizza 객체
    Circle pizza(30);//매개 변수가 한개 있는 생성자를 호출
    double area = pizza.getArea();
    cout << "pizza의 면적은 " << area << endl;
 
    //donut 객체
    //기본 생성자가 호출 : 컴파일러가 자동으로 코드 삽입.
    //컴파일러가 자동으로 삽입해주지 않는 경우 : 하나라도 생성자가 선언되어 있는 클래스의 경우.
    Circle donut;
    donut.radius = 1;
    area = donut.getArea();
    
    cout << "donut의 면적은 " << area << endl;
    return 0;
}
cs

 

 

5. 생성자 함수 특징

- 객체가 생성될 때, 객체가 필요한 초기화를 위함

- 생성자 이름클래스 이름동일하다.

- 생성자는 리턴 타입을 선언하지 않는다.

- 객체 생성 시 오직 한 번만 호출한다.

- 생성자는 중복 선언이 가능하다.

- 생성자가 선언 되어 있지 않으면본 생성자자동으로 만들어진다.

 

*사각형 예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<iostream>
#include<string>
#include<cstdlib>
 
using namespace std;
class Rectangle {
public:
    int width, height;
    bool isSquare();
    Rectangle();//생성자 선언
    Rectangle(int width, int height);
    Rectangle(int length);
};
 
bool Rectangle:: isSquare() {
    if (width == height)
        return true;
    else
        return false;
}
//기본 생성자 구현. rect가 자동으로 호출하는 생성자
Rectangle::Rectangle() {
    width = height = 1;
}
//매개변수가 2개인 생성자 구현. rect2가 자동으로 호출하는 생성자
Rectangle:: Rectangle(int w, int h) {
    width = w;
    height = h;
}
//매개변수가 1개인 생성자 구현. rect3가 자동으로 호출하는 생성자
Rectangle::Rectangle(int length) {
    width = length;
    height = length;
}
 
int main() {
    Rectangle rect1;//기본 생성자 호출
    Rectangle rect2(3,5); //매개변수가 2개인 생성자를 호출
    Rectangle rect3(3);//매개변수가 1개인 생성자를 호출
    
    if (rect1.isSquare()) cout << "rec1은 정사각형이다." << endl;
    if (rect2.isSquare()) cout << "rec2은 정사각형이다." << endl;
    if (rect3.isSquare()) cout << "rec3은 정사각형이다." << endl;
 
    return 0;
}
cs

 

 

3.5 소멸자

- 객체가 사라질 떄 필요한 마무리 작업을 위함이다.

- 소멸자의 이름은 클래스 이름 앞에 '~'를 붙인다.

- 리턴 타입이 없다.

- 소멸자는 오직 한개만 존재한다.

- 매개변수를 가지지 않는다.

- 소멸저가 선언되어 있지 않으면 자동으로 생성된다.

 

*사용 형식

class Circle{

Circle();

Circle(int r);

........

~Circle();

}

Circle:: ~Circle(){
......

}

 

*소멸자 함수 예제(위 사각형 예제)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include<iostream>
#include<string>
#include<cstdlib>
 
using namespace std;
class Rectangle {
public:
    int width, height;
    bool isSquare();
    Rectangle();
    Rectangle(int width, int height);
    Rectangle(int length);
    ~Rectangle();//소멸자 함수
};
 
bool Rectangle:: isSquare() {
    if (width == height)
        return true;
    else
        return false;
}
 
Rectangle::~Rectangle() {//소멸자 함수 구현
    cout << "width = " << width << "height= " << height << "인 객체소멸" <<endl;
    system("pause");
}
 
//기본 생성자 구현. rect가 자동으로 호출하는 생성자
Rectangle::Rectangle() {
    width = height = 1;
    cout << "rect1 객체 생성" << endl << endl;
}
//매개변수가 2개인 생성자 구현. rect2가 자동으로 호출하는 생성자
Rectangle:: Rectangle(int w, int h) {
    width = w;
    height = h;
    cout << "rect2 객체 생성" << endl << endl;
}
//매개변수가 1개인 생성자 구현. rect3가 자동으로 호출하는 생성자
Rectangle::Rectangle(int length) {
    width = length;
    height = length;
    cout << "rect3 객체 생성" << endl << endl;
}
 
int main() {
    Rectangle rect1;//기본 생성자 호출
    Rectangle rect2(3,5); //매개변수가 2개인 생성자를 호출
    Rectangle rect3(3);//매개변수가 1개인 생성자를 호출
    
    return 0;
}
cs

 

댓글