C++

DefaultConstructer(기본 생성자)

Nin 2020. 12. 18. 02:42
int main()
{
   int Value = 0;
   int Value2 = int(Value);
}

위의 코드에서 int(Value)의 int는 생성자이다.

 

class MyInt
{
private:
   int Value;
   
public:
   Myint(int _Value) : Value(Value)
   {
   }
};

int main()
{
   MyInt MValue = 0;
   Myint MValue1 = MyInt(MValue);
   MValue = 10;
}

MyInt 클래스를 위와같이 만들어주면 위의 int와 같은 방법으로 사용할 수 있다.

여기서 MyInt의 생성자는 인자가 자기 자신과 타입(형태)이 같은 녀석이 들어온다.

MValue = 10 이란 코드도 문제 없이 실행된다.내가 만들지 않은 코드인데도

실행된다. 컴파일러가 자동으로 만들어주기 때문이다.

public:
   MyInt(const MyInt& _Other) : Value(_Other.Value)
   {
   }

위와 같은 코드가 디폴트 복사 생성자 이고 내가 만들지 않으면

자동으로 생성된다. MyInt& _Other에 const가 붙은 이유는

나의 값은 바뀌지 않고 완전히 똑같은 복제품이 나올거라고 생각하는데

안에서 그 값이 변경되버리면 이해할 수 없는 코드가 된다.

public:
   MyInt& operator=(const MyInt& _Other)
   {
      Value = _Other.Value;
   }

위와 같은 코드가 디폴트 대입 연산자 이다.

역시나 내가 만들지 않으면 자동으로 생성된다.

이것 역시 나와 완전히 똑같은 상태(멤버변수)가 되는것이기 때문에 const가 붙는다.

 

주의할점!

class MyInt
{
public:
   int Value;
   int Value2;
   
public:
   MyInt& operator=(const MyInt& _Other)
   {
      Value = _Other.Value;
      Value = _Other.Value2;
   }
};

기능을 추가하면서 새로운 멤버변수가 추가되었을때

까먹지 말고 연산자,생성자에도 추가를 해줘야 한다.

 

복습!

class Test
{
};
int main()
{
   Test My;
}

이렇게 클래스를 만들고 객체를 생성하면 자동으로 만들어지는 것들 !

 

class Test
{
private:
}

디폴트 접근 제한 지정자

public:
   Test()
   {
   }

디폴트 생성자

public:
   Test(const Test& _Other)
   {
   }

디폴트 복사 생성자

public:
   ~Test()
   {
   }

디폴트 소멸자

public:
   Test& operator=(const Test& _Other)
   {
      return *this;
   }

디폴트 대입 연산자

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

방어코드,Assert  (0) 2020.12.19
순환참조,Inheritance(상속),업캐스팅  (0) 2020.12.18
복습) 임시 변수,레퍼런스(reference)  (0) 2020.12.17
cout,GlobalClass  (0) 2020.12.16
namespace  (0) 2020.12.16