ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 객체의 생성과 소멸
    C++ 2021. 12. 21. 23:47

    https://www.youtube.com/watch?v=YL8SgKEyRu4&list=PLlJhQXcLQBJqywc5dweQ75GBRubzPxhAk&index=61

     

    생성자 : 객체가 생성될 때 자동으로 호출되는 함수

    소멸자 : 객체가 소멸될 때 자동으로 호출되는 함수

     

    둘다 클래스 내부에 따로 선언하지 않을경우 디폴트 생성자와 디폴트 소멸자가 보이지 않게 생성되어있다.

     

    1. 전역변수 오브젝트 생성 소멸 순서

    #include <iostream>
    
    using namespace std;
    
    class MyClass {
    public:
    	MyClass() { // 생성자
    		cout << "생성자가 호출되었습니다." << endl;
    	}
    
    	~MyClass() { // 소멸자
    		cout << "소멸자가 호출되었습니다." << endl;
    	}
    };
    
    MyClass globalObj;
    
    int main()
    {
    	cout << "main 함수 시작!!" << endl;
    	cout << "main 함수 끝!!" << endl;
    }

    출력결과

    생성자 -> main 함수 -> main 함수 종료 -> 소멸자

     

    2. 지역변수 오브젝트 생성 소멸 순서

    #include <iostream>
    
    using namespace std;
    
    class MyClass {
    public:
    	MyClass() { // 생성자
    		cout << "생성자가 호출되었습니다." << endl;
    	}
    
    	~MyClass() { // 소멸자
    		cout << "소멸자가 호출되었습니다." << endl;
    	}
    };
    
    //MyClass globalObj;
    
    void testLocalObj() {
    	cout << "testLocalObj 함수 시작!" << endl;
    	MyClass localObj;
    	cout << "testLocalObj 함수 끝!" << endl;
    }
    int main()
    {
    	cout << "main 함수 시작!!" << endl;
    	testLocalObj();
    	cout << "main 함수 끝!!" << endl;
    }

    출력결과

    main 함수 -> testLocalObj함수 -> 생성자 -> testLocalObj함수 종료 -> 소멸자 -> main 함수 종료

     

    3. 생성자 초기화 방법들

    생성자 : 멤버변수 초기화 역할을 한다.

    #include <iostream>
    
    using namespace std;
    
    class Complex {
    public:
    	Complex() {
    		real = 0;
    		imag = 0;
    	}
    
    	Complex(double real_, double imag_) {
    		real = real_;
    		imag = imag_;
    
    	}
    	double GetReal() {
    		return real;
    	}
    	void SetReal(double real_) {
    		real = real_;
    	}
    
    	double GetImg() {
    		return imag;
    	}
    	void SetImag(double imag_) {
    		imag = imag_;
    	}
    private:
    	double real;
    	double imag;
    };
    
    int main() {
    	Complex c1;
    	Complex c2 = Complex(2, 3);
    	Complex c3(2, 3);
    	Complex c4 = { 2, 3 };
    	Complex c5 = Complex{ 2, 3 };
    	Complex c6{ 2, 3 };
    
    	cout << "c1 = " << c1.GetReal() << ", " << c1.GetImg() << endl;
    	cout << "c2 = " << c2.GetReal() << ", " << c2.GetImg() << endl;
    	cout << "c3 = " << c3.GetReal() << ", " << c3.GetImg() << endl;
    	cout << "c4 = " << c4.GetReal() << ", " << c4.GetImg() << endl;
    	cout << "c5 = " << c5.GetReal() << ", " << c5.GetImg() << endl;
    	cout << "c6 = " << c6.GetReal() << ", " << c6.GetImg() << endl;
    }

    main함수 안에 보다시피 생성자 초기화에는 6가지 방법이 있다.

    'C++' 카테고리의 다른 글

    정적 멤버 (1)  (0) 2021.12.23
    생성자의 다양한 사용 방법  (0) 2021.12.23
    this 포인터  (0) 2021.12.21
    클래스 = 구조체??, 접근제어지시자  (0) 2021.12.21
    네임스페이스  (0) 2021.12.21
Designed by Tistory.