(전체가 아니라 C#과 차이가 있는 부분을 중심으로 요약 정리)

클래스 작성 방법

클래스 정의

class SpreadsheetCell
{
  public:
    void setValue(double inValue);
    double getValue() const;
  private:
    double mValue;
}

(클래스 관련 설명 생략)

객체를 변경하지 않는 멤버 함수는 항상 const로 선언하는 것이 바람직하다. (double getValue() const; 부분)

메서드 정의 방법

함수를 만들 때는 프로토타입뿐만 아니라 함수를 구현하는 정의 코드를 함께 작성하듯이 메서드도 프로토타입뿐만 아니라 메서드를 구현하는 정의 코드도 반드시 작성해야 한다. 이때 메서드 정의 코드보다 클래스 정의 코드가 먼저 나와야 한다.

클래스 정의는 주로 헤더 파일에 작성하고, 메서드 정의는 소스 파일에 작성한 뒤 소스 파일에서 #include 문으로 헤더 파일을 불러오는 방식으로 사용한다. SpreadsheetCell 클래스의 두 메서드를 다음과 같이 작성한다.

#include "SpreadsheetCell.h"

void SpreadsheetCell::setValue(double inValue)
{
  mValue = inValue;
}

double SpreadsheetCell::getValue() const
{
  return mValue;
}

메서드 이름 앞에 클래스 이름과 콜론 두 개가 붙어 있는데, 여기서 ::를 스코프 지정 연산자라 부른다. 컴파일러가 이 코드를 보면 여기 나온 setValue() 메서드는 SpreadsheetCell 클래스에 속한다는 것을 알 수 있다. 메서드를 구현할 때는 접근 제한자를 생략해도 된다.

(이하 설명 생략)

객체 사용법

객체를 생성해서 사용하는 방법은 크게 두 가지가 있는데, 하나는 스택에 생성하는 것이고 다른 하나는 힙에 생성하는 것이다.

스택에 생성한 객체

SpreadsheetCell myCell, anotherCell;
myCell.setValue(6);
anotherCell.setString("3.2");

cout << "cell 1: " << myCell.getValue() << endl;
cout << "cell 2: " << anotherCell.getValue() << endl;

---
/* 실행 결과
cell 1: 6
cell 2: 3.2
*/

힙에 생성한 객체

다음과 같이 new를 사용해서 객체를 동적으로 생성할 수도 있다.

SpreadsheetCell* myCellp = new SpreadsheetCell();
myCellp->setValue(3.7);

cout << "cell 1: " << myCellp->getValue() << " " << mycellp-getString() << endl;

delete myCellp;
myCellp = nullptr;

힙에 생성한 객체는 화살표 연산자(->)로 멤버에 접근한다. 화살표 연산자는 역참조 연산자(*)와 멤버 접근 연산자(.)를 합친 것이다. 화살표 대신 두 연산자르 ㄹ조합해서 사용해도 되지만 코드가 복잡해 진다.