특별 맴버 함수
생성자가 전혀 정의되어 있지 않으면 컴파일러가 자동으로 디폴트 생성자를 만든다
생성자의 오버로딩울 보여줌과 동시에 다양한 형태로 인스턴스를 선언한다.
class Player {
private:
int _health;
int _power;
public:
Player() {
_health = 100;
_power = 50;
cout << "Player " << _health << ", " << _power << endl;
}
Player(int health, int power) {
_health = health;
_power = power;
cout << "Player " << _health << ", " << _power << endl;
}
// 생성자 오버로딩 가능
};
int main() {
Player player0(200, 50);
Player player1 = Player(300,100);
Player* player2 = new Player(400, 20);
Player player3;
Player player4 = Player();
Player* player5 = new Player();
return 0;
}
Player 200, 50
Player 300, 100
Player 400, 20
Player 100, 50
Player 100, 50
Player 100, 50
생성자가 전혀 정의되어 있지 않으면 컴파일러가 자동으로 디폴트 생성자를 만든다
#include <iostream>
using namespace std;
class Test {
public:
int num;
Test() {
num = 10;
}
};
class Player {
public:
int _health;
int _power;
Test _test;
};
int main() {
Player player3;
Player player4 = Player();
Player* player5 = new Player();
cout << player3._test.num << endl;
cout << player3._health << endl;
cout << player3._power << endl;
}
10
-858993460
-858993460
디폴트 생성자를 컴파일러가 만든 인스턴스 맴버로 객체가 있다면 그 객체의 디폴트 생성자를 호출해서 초기화 한다.
생성자에 콜론을 붙여 다른 생성자를 붙여 초기화를 시킨다
#include <iostream>
using namespace std;
class Player {
private:
int _health;
int _power;
const string _name = "noname";
public:
Player() : Player(100, 50, "noname") {
}
Player(int health, int power, string name)
: _health(health), _power(power), _name(name)
{
cout << "Player " << _health << ", " << _power << endl;
}
void print() {
cout << _name << " : " << _health << " : " << _power << endl;
}
};
int main() {
Player player3;
player3.print();
}
Player 100, 50
noname : 100 : 50