본문 바로가기
C++/기초(두들낙서)

[C++] 객체의 생성과 소멸

by Meaning_ 2022. 7. 1.
728x90
반응형

생성자와 소멸자

 

항상 생성자는 public으로 선언해줘야 한다!

생성자가 없을 때도 생성자는 호출되고, 소멸자도 호출된다. 이것을 디폴트 생성자, 소멸자라고 하는데

이것의 모양은 MyClass(){} 의 형태로 안에 내용이 아무것도 없다!

 

생성자의 기능은 멤버 변수를 초기화 하고, 소멸자의 기능은 메모리를 해제한다.

 

복소수 클래스를 만들어보자!

 

 

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
class Complex {
 
public:
 
    Complex() {
        real = 0;
        imaginary = 0;
    }
    double GetReal() {
        return real;
    }
 
    double SetReal(double real) {
        this->real = real;
    }
 
    double GetImag() {
        return imaginary;
    }
 
    double SetImag(double imaginary) {
        this->imaginary = imaginary;
    }
private:
    double real;
    double imaginary;
    
};
cs

 

Complex생성자에서 오버로딩을 해볼것이다. 

 

여기서 this->real은 매개변수 real이 아닌 private으로 선언한 멤버변수 real이다. 

c1은 생성자가 없기에 디폴트 생성자 실행되고, c2는 생성자에 들어갈 매개변수 2개가 있기에

오버로딩한 생성자가 실행된다. 

 

 

생성자 

 

디폴트 생성자를 만들어주는 것보다 real과 imaginary변수를 받는데 이것을 디폴트 매개변수로 설정해주는 것이 모호성을

줄이는데 도움이 된다. 

 

real=0 imaginary=0으로 디폴트 매개변수를 설정해주면 만약 매개변수가 들어오지 않으면 0으로 설정되고, 매개변수가 특정숫자로 들어오면 그 특정숫자가 real가 imaginary 변수에 대입된다. 

 

c1에는 아무것도 넣어주지 않았으니 디폴트 매개변수에 의해 0,0이 출력된다.

 

생성자 초기화 목록

 

디폴트 생성자의 초기화 목록이다.

 

이 Complex 생성자를 초기화 목록으로 구현해보면

생성자 초기화 목록에서 신기한점이 굳이 this를 쓰지 않고도 멤버변수와 매개변수의 이름이 같을 때

구분해 줄 수 있다는 것이다!  하얀색은 멤버변수 real이고 회색은 매개변수 real이다. 

 

+ 궁금한점 ) 꼭 맨위에  0으로 설정하는 생성자를 만들어서 초기화하는 것이 필요한지?

 

 

Time 클래스 만들기

 

예를 들어 5초를 출력할 때는 0시간 0분 5초가 나와야 하지만 입력받을 때는 5만 입력하게끔 하려고 한다. 

 

중요한건 우선 h와 m과 s를 0으로 초기화 시켜줘야 한다!

 

생성자 위임

생성자 위임이란 특정한 생성자 내에서 자기 클래스 내의 다른 생성자를 호출 할 수 있다.

 

 생성자 위임을 받으면 위임 받은 애의 변수를 먼저 본다. 그래서 위임받은 생성자를 먼저 호출한다.

728x90
반응형

댓글