1) Class
class name {
((access-modifier:)?
[member-field member-function]*)*
};
- Access modifier (접근 지정자)
- private : 같은 class 내에서만 접근 가능
- protected : 같은 class와 chile class 에서만 접근 가능
- public : 모든 class에서 접근 가능
- definition (정의) : How it works (implementation) <- source file(.cc)ReturnType FunctionName (Parameters);
ReturnType ClassName::FunctionName (Parameters) { BodyStmt; }
2) Constructor - 생성자
Constructor의 종류
- Default constructor
- Implicit conversion constructor
- Explicit conversion constructor
- Copy constructor
Default constructor : parameter를 가지지 않는 생성자
(parameter를 가질수도 있자면 모든 parameter는 default value이다.)
개발자가 구현하지 않아도 compiler가 자동으로 생성해준다.
Car() : name_("mycar") { }
Implicit conversion constructor : explicit keyword를 사용하지 않는 생성자
(Google C++ style guid에서는 추천하지 않는 방식)
Car(std::string name) : name_(name) { }
Explicit conversion constructor : explicit keyword를 사용하는 생성자
(명시적 type conversion으로 생성할 때 사용
google C++ style guide에서 추천하는 방식)
explicit Car(std::string name) : name_(name) { }
Copy constructor : object를 copy해 사용하는 생성자
Car(const Car& car) : name_(car.name_) {
for(int = 0; i < 4; i++) {
doors_[i] = car.doors_[i];
}
}
3) namespace : code가 선언되어있는 지역 (잘사용하면 매우 좋음.)
"main" function은 어떠한 namespaces에도 속해있지 않다.
- 아래와 같이 같은 이름의 변수가 동시에 선언되어있다면 에러가 발생한다.
namespace를 사용하면 동일한 이름의 변수를 정의해도 namespace로 접근하게 되면 에러가 발생하지 않고 올바르게 출력된다.
오늘은 언어의 기본이 될 수 있는 class, constructor, namespace에 대해 공부했다. class와 constructor는 기존에 공부했던 java, C언어와 유사하기 때문에 쉽게 이해할 수 있었고, namespace라는 개념은 이번에 C++을 공부하며 처음 접하게 되었다. java에서 class에 선언한 뒤 classname.funcion을 접근하는 느낌이라 신기했다. C++은 공부할수록 점점 더 재밌어지는 언어인 것 같다.