C++는 multi paradigm language로 Procedural, function, OOP, generic을 모두 지원하고, 그 중 OOP가 중심이다.
C++ OOP Intro
- class를 중심으로 구현.
- class -> definition.
- object -> 실제 메모리를 차지하는 객체.
Abstraction
- generalization, modelling..
Encapsulation
- data를 외부에서 접근이 불가능하도록(private) 함.
Inheritance
- 상속성
Polymorphism
- 다형성
- function overloading : 같은 이름의 다른 파라미터를 받는 함수를 정의할 수 있음.
- function overriding : 상속을 받은 클래스의 메소드에 override 또는 virtual 키워드를 사용해 구현 가능.
Object Alignment
- class 멤버변수는 주소값이 자신의 size의 배수의 위치에서 시작해야함.
- 또한 obejct의 전체 size는 멤버변수 중 가장 큰 변수의 size의 배수로 끝나야함.
- 1, 2번 rule을 위해 padding이 들어가게 됨.
// class size를 32byte로 align해 false sharing 방지.
class alignas(32) Cat
{
...
}
Static members
1. Static member function
static void staticfunc();
- object와 연관이 없으며, 객체가 생성되지 않아도 call 가능.
- member variable을 사용할 수 없다.
2. Static member variable
static int count;
- program 실행 전 초기화해야함.
- static 메모리 공간에 저장됨.
- 클래스 메소드 내부에 static member variable을 선언하면 외부, 다른 메소드에서 접근 불가능하도록 할 수 있음.
- const, constexpr 을 사용하면 static variable을 선언하는 동시에 초기화가 가능하다.
Member Init List
- 생성자 내부에서 object를 할당하면 copy가 일어나게 된다.
CLS1(int var):mVar1(var), mVar2(var){};
와 같이 member init list를 이용하면 copy 없이 객체를 초기화할 수 있다.
- primitive type의 경우는 생성자 내부에서 초기화하는것과 별 차이가 없음.
Copy/move Constructor