C++ 클래스와 객체


클래스와 객체

객체지향 프로그래밍(Object Oriented Programming)

클래스는 설계도다. 객체는 건물이다. 객체는 3가지로 설명한다. identity, 속성과 행동

클래스 생성

  • 클래스를 구성하는 요소

  • class Car {};

    • 타입 생성자 class
    • 클래스 이름 ex Bus
    • 내용을 담을 공간 {}
    • 끝맺음 세미콜론 ;

접근 제한자

C++에는 총 3가지 접근 제한자가 있다. 클래스를 선언하고 바디에 담기는 메서드와 속성을 통틀어서 해당 클래스의 멤버라고 하는데, 이 멤버에 대한 접근 권한이 다를 수 있다. 이때 사용하는 제한자를 접근 제한자라고 부른다. 접근 제한자는 인스턴스 단위로 제한하는 것이 아니라 타입(클래스) 단위로 제한한다. 무슨말이냐면

  • public : 접근 제한자 중에서 가장 아량이 넓은 클래스다. 해당 클래스를 불러올 수 있는 어디에서나 쓸 수 있다.
  • private : 접근 제한자 중에서 가장 제한이 큰 클래스다. 해당 클래스 안에서만 이 private 멤버에 접근할 수 있다. 또한 접근 제한자는 타입 단위로 제한하기 때문에 다른 객체라고 하더라도 같은 클래스에 속한다면 접근할 수 있다.
 	private:
 	 	int power = 0;
    Car operator+(Car obj){
        Car res = Car(4);
        res.power = this -> power + obj.power;
        return res;
    }

간단하게 작성한 Car라는 클래스의 일부를 가져온 것이다. (코드를 이해할 필요는 전혀 없다).메서드 내에서 res라는 Car 타입의 객체를 만들고 res.power라고 private한 멤버에 접근할 수 있는 것을 알 수 있다.

  • 지금까지 타입 내외로 접근 권한을 제한하는 방법을 배웠다. 이번에는 상속의 관점에서 바라보자. public 멤버는 자식 클래스에서 상속받을 수 있는데, private 멤버는 자식클래스에서 상속받는 것이 불가능하다. 이러한 관점에서 탄생한 것이 protected 접근 제한자이다.
  • protected : 상속을 위한 private 멤버. 타입 단위로는 private한 멤버로 기능을 하고, 자식 클래스와 관계에서는 public 멤버로서 기능을 한다고 이해하면 된다.

클래스의 종류

클래스는 그 자체가 타입이다. 그런데 클래스를 어떻게 나눈다는 말일까.
클래스는 두 가지 종류가 있다. 객체를 생성하는 클래스와 객체를 생성하지 않는 클래스이다.
객체를 생성하지 클래스는 우리가 지금까지 만들어 오던 일이지만, 객체를 생성하지 않는 클래스는 왜 존재할까. 새를 예를 들어보자. 새에서 클래스를 만들어본다면 우리는 독수리, 까치같은 클래스를 만들어 낼 수 있을 것이다. 이렇게 실제로 존재하는 객체를 생성해내는 클래스와 별개로 여러 품종들을 묶어주는 새라는 클래스를 만들 수도 있다. 이 새라는 클래스는 여러 새 품종들이 가지는 공통적인 특징들, 예를 들어 깃털이 있다는 특징을 가지고 있을 수 있다. 하지만 이 새 클래스는 실체를 가진 객체가 없다. 이러한 객체를 생성하지 않는 클래스를 추상화 클래스라고 한다.

  • Encapsulation : 데이터를 클래스 외부에서 보이지 않게 하기 때문에 캡슐화가 가능하다.
  • Private : A private member 는 클래스 외부에서 절대 접근할 수 없다.
  • Constructors : 이것은 함수다. Class constructors are special member functions of a class. They are executed whenever new objects are created within that class. 파이썬의 init과 비슷
  • Scope Resolution Operator : The double colon in the source file (.cpp) is called the scope resolution operator, and it’s used for the constructor definition:
  • Source & Header
  • Destructors : Destructors are special functions, as well. They’re called when an object is destroyed or deleted.
  • overload : parameter가 다른 종류를 갖는 같은 이름의 함수를 여러개 만드는 것.
  • #ifndef & #define : ifndef stands for “if not defined”. The first pair of statements tells the program to define the MyClass header file if it has not been defined already. endif ends the condition.
  • Member Functions : Since myPrint() is a regular member function, it’s necessary to specify its return type in both the declaration and the definition. 리턴 타입이 제일 앞에 나온다.
void MyClass::myPrint() {
  cout <<"Hello"<<endl;
}
  • Selection Operator : The arrow member selection operator (->) is used to access an object’s members with a pointer.
  • Constants : const int x = 42;

All const variables must be initialized when they’re created. In the case of classes, this initialization is done via constructors. If a class is not initialized using a parameterized constructor, a public default constructor must be provided - if no public default constructor is provided, a compiler error will occur.






© 2017. by yunsu

Powered by dolphin