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 |