C++나올떄, 기존 C에서 없던 구조체의 객체 지향적인 부분들이 C++의 클래스가 들고 나옴.
구조체란?
사용자가 직접 정의한 자료형
클래스란?
사용자가 정의한 자료형
C에서는 구조체를
typedef로 재정의해서 사용해야 되었던것과는 달리
그냥 이렇게하고
tMy 하고 하면됨.
이제 이렇게 할 것임 => 완전히 C++스타일로 간다.
기존의 C에서는 필드에 아무나 접근이 씹가능임.
그런데
나만의 자료형(class)를 정의하고
이렇게 하고 private: , public :, protected라는
접근 제한 지정자를 통해 접근을 제어 씹가능.
C#이랑 똑같은 개념있다. 반환타입 없고 초기값 셋팅
이런식으로.
디스어셈블리 가보면
call CMy::CMy로 호출함.
객체가 만들어짐과 동시에 값을 주어주는 것을 초기화라고한다.
그래서 클래스의 생성자 부분도 초기화가 아님
생성자 함수를 호출해서 자기자신의 필드? 멤버 변수에 접근해서 값을 넣어주니까.
이렇게 생성자 생성 -> 함수호출후 변수에 값 할당 2단계임
그래서
CMy()
이런식으로 이니셜라이즈 가능
(C#이랑 조금 다름)
꼭 해주어야 하는 일이 있을 수도 있다.
먼저 C#에서는
클래스이름 앞에 ~ 붙임 ~Cat() { } 이런식으로
그러면 CLR의 가비지 컬렉터가 객체가 소멸되는 시점 알아서 판단해서 이 종료자 호출해줌.
지금 클래스가 main함수 지역내에 있어서
return 0; 하기전에
이렇게 소멸자 호출된다.
그러면 이게 없는거냐?
아니다 컴파일러가 알아서 자동으로 만든다 but 아무런 기능이 없다.
이렇게 기본으로 만들어진 애들을 default생성자, default소멸자 라고한다.
CMy에 있는 함수를 사용하고 싶다면
CMy::SetInit(10) 이런식으로 안됨.
클래스의 실체화가 되어있는 변수에 해당하는 "객체"가 필요함.