카테고리 없음

생성자 Constructor

CalebHong 2022. 3. 11. 10:34

기본 생성자

기본 생성자는 반드시 필요하기 때문에 임의적으로 만들지 않으면 컴파일러가 자동으로 생성된다.

#include <iostream>
#include <string>

using namespace std;

class Student {
private:
	string _name;
	int _age;
	string _address;
	int _grade;
	int _classNum;

public:
	Student() { // 기본 생성자
		_age = 0;
		_address = "주소 없음";
		_grade = 0;
		_classNum = 0;
	}
}

int main() {
	Student a; // 기본 생성자 호출
    
    return 0;
}

인자를 받는 생성자를 하나라도 추가하면 컴파일러가 기본 생성자를 자동으로 추가하지 않는다.

따라서 기본 생성자가 없게 되는 경우에는 인자값 없이 객체를 만들 수 없게 된다.

#include <iostream>
#include <string>

using namespace std;

class Student {
private:
	string _name;
	int _age;
	string _address;
	int _grade;
	int _classNum;

public:
	Student(string name, int age, string address) {
		_name = name;
		cout << _name << "이 인자 2개를 받는 생성자" << endl;
		_age = age;
		_address = address;
		_grade = 0;
		_classNum = 0;
	}
}

int main() {
	Student a; // 기본 생성자 호출 불가
	Student a("아무개", 15, "서울"); // 인자값이 있는 생성자 호출 가능
    
    return 0;
}

 

생성자 초기화 리스트

기존에는 객체 생성 후 인자 값을 하나씩 넣지만 초기화 리스트는 객체를 생성하는 동시에 값이 할당된다.

Student(string name, int age, string address)
: _name(name), _age(age), _address(address), _grade(0), _classNum(0) // 생성자 초기화 리스트
{
    cout << _name << "이 인자 2개를 받는 생성자" << endl;
}

 

소멸자

소멸자는 객체가 소멸할 때 호출되는 함수

동적으로 생성된 변수를 소멸자에서 해제할 수 있다.

class Student {
	private:
		string _name;
		int _age;
		string _address;
		int _grade;
		int _classNum;

	public:
		Student() { // 생성장
			cout << "기본생성자" << endl;

			_age = 0;
			_address = "주소 없음";
			_grade = 0;
			_classNum = 0;
		}

		Student(string name, int age, string address)
		: _name(name), _age(age), _address(address), _grade(0), _classNum(0) // 생성자 초기화 리스트
		{
			cout << _name << "이 인자 2개를 받는 생성자" << endl;
		}

	~Student() { // 소멸자
    	cout << _name << "의 소멸자" << endl;
	}
};

int main() {
	Student a; // 기본 생성자 호출 불가
	Student a("아무개", 15, "서울"); // 인자값이 있는 생성자 호출 가능
    
    return 0;
} // a객체가 여기서 삭제되기 때문에 소멸자 함수는 여기서 실행된다.