C++ 클래스 - 생성자

진경천·2023년 9월 16일
0

C++

목록 보기
37/90

특별 맴버 함수
생성자가 전혀 정의되어 있지 않으면 컴파일러가 자동으로 디폴트 생성자를 만든다

생성자의 오버로딩

생성자의 오버로딩울 보여줌과 동시에 다양한 형태로 인스턴스를 선언한다.

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

default 생성자

생성자가 전혀 정의되어 있지 않으면 컴파일러가 자동으로 디폴트 생성자를 만든다

#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

profile
어중이떠중이

0개의 댓글