티스토리 뷰
1. default constructor (디폴트 생성자)의 역할
클래스 객체();
- 이 문장을 사용하면 디폴트 생성자가 사용되며 객체가 객체화 될줄 알았는데 아니었다. 함수가 정의되는 것이었다. 다시 보니 클래스타입의 반환형을 갖는 함수인게 당연한건데 다른 생성자를 이용한 초기화에 생각이 몰리다보니 저런 생각을 했던 것 같다.
심지어 책에서도 C++ 초보자들이 하는 실수라고 주의 사항에 적혀있다 ㅋㅋ
2. 클래스 임시적 형 변환 (implicit class-type conversions)
이 파트는 C++ 카테고리에서 따로 한번 정리해야겠다. 좀 신기하면서도 복잡한 내용이었는데 간략히하면 클래스에 인자를 하나만 받는 생성자가 있을 때 그 인자타입을 갖는 변수를 해당 클래스로 형 변환 할수 있다는 것이다.
말로 설명하니 엄청 꼬이는데 간단히 살펴보면
class A(){
A(string s) : a_member(s) { }
}
같은 클래스가 있다고 보자 그럼 string 타입의 s 인자 하나를 갖는 생성자가 존재하는 A 클래스가 정의된다.
이제 객체를 생성할 것인데,
A a_instance = "blah blah";
이런 구문이 가능하단 것이다! 완전 신기함ㅋㅋ 다른건안되고 인자하나인 생성자를 가져야만 가능하다. 더 재밌는 내용들이 있는데 그건 C++카테고리에서 자세하게 다루겠다.
explicit 지시어를 사용하면 이것을 예방할 수 있고, static_cast<>를 사용하면 explicit을 강제로 무력화 시킬수 있다는 것도 재밌었다.
3. Aggregate class
번역을 어떻게 해야할지 고민돼서 그냥 이대로 쓴다.
모든 데이터멤버가 public이고 생성자가 없으며 클래스 내부 초기화가 아예없다면 aggregate class로 본다.
클래스 객체 = {멤버1에 넣을 값, 멤버2에 넣을 값}
이런식으로 초기화 시켜 줄수 있다고 한다. 아무래도 좀 위험해 보이는 것이니 알아만 두자.
6. Literal Class
aggregate class 중 모든 멤버타입이 literal 이면 literal class라 한다.
'technote > C++' 카테고리의 다른 글
정적라이브러리 공유라이브러리 (0) | 2018.10.17 |
---|---|
cmake를 이용해 빌드하기 (0) | 2018.10.17 |
g++ 기본 옵션 (0) | 2018.10.16 |
C++ 위임 생성자 (0) | 2018.10.15 |
C++ private 생성자 (0) | 2018.07.30 |