기본 생성자
기본 생성자는 반드시 필요하기 때문에 임의적으로 만들지 않으면 컴파일러가 자동으로 생성된다.
#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객체가 여기서 삭제되기 때문에 소멸자 함수는 여기서 실행된다.