Game!

일부 멤버 함수들은 C++에서 클래스 안에 직접 선언해 넣지 않으면 컴파일러가 자동으로 선언해주도록 되어 있습니다.

 

바로.

 

1. 복사 생성자(copy constructor)

2. 복사 대입 연산자(copy assignment operator)

3. 소멸자(destructor)

4. 기본 생성자 (선언 해놓지 않았다면)

가 있습니다.

컴파일러가 만드는 함수의 형태는 모두 기본형이다. 모두 public 멤버이며 inline 함수입니다.

 

class Player {};

이렇게 선언한 클래스와  아래와 같이 선언한 클래스가 대동소이하다는 것입니다.

class Player
{
public:
     Player() // 기본생성자
     {}
     
     Player(const Player& rhs) //복사 생성자
     {}
     
     ~Player() //소멸자 *소멸자는 항상 가상 소멸자가 좋습니다.
     {}

	 Player operator=(const Player& rhs) //복사 대입 연산자
     {}  

};

 

이들은 꼭 필요하다고 컴파일러가 판단할 때만 만들어지도록 되어 있지만, 필요한 조건이 대단하진 않습니다.

 

Player p1; //기본생성자 그리고 소멸자
Player p2(p1) // 복사 생성자

p1=p2; //대입연산자

 

 

하지만, 작성자가 기본 생성자를 선언하지 않고, 파라미터를 받은 생성자만 선언해놓았다면, 컴파일러는 기본 생성자를 만들지 않는다.

 

 

 

정리

* 컴파일러는 경우에 따라 클래스에 대해 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 암시적으로 만들어 놓을 수 있습니다.

 

 

다른 또 하나의 방법으로는 

 

 

* 컴파일러에서 자동으로 제공하는 기능을 허용치 않으려면, 대응 되는 멤버 함수를 private선언한 후에 구현은 하지 않은 채로 두는 방법이다.

 

 

 

 

'Language > C++' 카테고리의 다른 글

[C++] cin 입력 시 공백 포함 으로 입력 받기  (0) 2024.01.17
[C++] 함수 객체와 임시 객체  (0) 2023.11.23
[BT] 요약  (0) 2023.08.18
[C++] C++ 스타일 파일입출력  (0) 2022.11.12
[C] C 스타일 파일입출력  (0) 2022.11.12