[C++] OOP

haeryong·2023년 1월 29일
0

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

0개의 댓글