-
객체의 생성과 소멸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