이이프
IeF 제멋대로 세상
이이프
전체 방문자
오늘
어제

공지사항

  • ✔ Info
  • 전체 글보기 (56)
    • 💻프로그래밍 내용 정리 (55)
      • C (0)
      • C++17 (55)
    • 💻게임메이커 (0)
    • 💻언리얼엔진 (0)
    • 💻유니티 (0)
    • 🎈[팀&자작]게임소개 (0)
    • 📃게임제작기술 (0)
    • 🎨그림놀이 (0)
    • 📒대학생활 (0)
    • 😃잡담 (1)
    • 🕹게임성과 (0)
    • 💷자격증 (0)

블로그 메뉴

  • 방명록

최근 글

최근 댓글

티스토리

hELLO · Designed By 정상우.
이이프
💻프로그래밍 내용 정리/C++17

[C++ 1.3.1] 클래스 정의, 접근 수준(public, private), 생성자(생성자 이니셜라이저), 소멸자

💻프로그래밍 내용 정리/C++17

[C++ 1.3.1] 클래스 정의, 접근 수준(public, private), 생성자(생성자 이니셜라이저), 소멸자

2022. 8. 17. 17:03
728x90

클래스(class)

클래스란 객체의 특성을 정의한 것이다.

C++에서 클래스를 선언하는 코드는 주로 헤더 파일(.h)에 작성하고,

구체적으로 구현하는 코드는 소스 파일(.cpp)에 작성된다.

 

클래스를 이해하기 위해 항공기 티켓에 대한 클래스를 정의해보자.

이 클래스는 비행 마일리지에 따라 티켓의 가격을 계산하고, 우수 등급 회원인지 여부도 표현한다.

우수 등급 회원인지 여부도 표현한다.

 

 


 

접근 수준

클래스를 정의할 때는 먼저 클래스 이름부터 적는다.

그리고 중괄호 안에 이 클래스의 데이터 멤버(속성)와 메서드(동작)을 선언한다.

각각의  데이터 멤버와 메서드마다 public, protected, private 등으로 접근 수준을 지정한다.

 

public으로 지정한 멤버는 클래스 밖에서 접근할 수 있는 반면

private로 지정한 멤버는 클래스 외부에서 접근할 수 없다.

 

대체로 데이터 멤버는 모두 private로 지정하고, 외부에서 데이터 멤버를 접근하게 하려면

그 값을 가져오는 메서드(게터)나 설정하는 메서드(세터)를 정의하고 이를 public으로 지정한다.

#include <string>

class AirlineTicket
{
public:
	AirlineTicket();
	~AirlineTicket();

	double calculatePriceInDollars() const;

	const std::string& getPassengerName() const;
	void setPassengerName(const std::string& name);

	int getNumberOfMiles() const;
	void setNumberOfMiles(int miles);

	bool hasEliteSuperRewardsStatus() const;
	void setHasEliteSuperRewardsStatus(bool status);
private:
	std::string mPassengerName;
	int mNumberOfMiles;
	bool mHasEliteSuperRewardsStatus;
};

const-정확성 원칙에 따르면 객체의 데이터 멤버 값을 변경하지 않는 멤버 함수는 항상 const로 지정하는 것이 좋다.

이렇게 지정한 멤버 함수를 '인스펙터, 접근자 또는 게터'라 부르며, non-const 멤버 함수를 '뮤레이터(변경자)'라 부른다.

 

 


 

생성자와 소멸자

클래스와 이름이 같고 리턴 타입이 없는 메서드를 생성자라 부른다.

이 메서드는 해당 클래스의 객체를 생성할 때 자동으로 호출된다.

 

생성자의 형태는 같지만 앞에 물결(~)을 붙인 메서드를 소멸자라 부른다.

이 메서드는 객체가 제거될 때 자동으로 호출된다.

 

생성자 초기화

생성자로 데이터 멤버를 초기화하는 방법은 두 가지다.

첫 번째는 생성자 이니셜라이저(ctor 이니셜라이저)를 사용하는 것으로, 생성자 이름 뒤에 콜론(:)을 붙여서 표현한다.

AirlineTicket 클래스의 생성자에서 ctor 이니셜라이저를 사용하는 방법은 다음과 같다.

AirlineTicket::AirlineTicket()
	: mPassengerName("Unknown Passenger")
	, mNumberOfMiles(0)
	, mHasEliteSuperRewardsStatus(false)
{
}

두 번째 방법은 다음과 같이 생성자의 본문에서 초기화하는 것이다.

AirlineTicket::AirlineTicket()
{
	// 데이터 멤버 초기화
	mPassengerName = "Unknown Passenger";
	mNumberOfMiles = 0;
	mHasEliteSuperRewardsStatus = false;
}

생성자에서 다른 일을 하지 않고 데이터 멤버를 초기화하는 일만 한다면 굳이 생성자를 따로 정의할 필요가 없다.

다음 코드 처럼 클래스를 정의하는 코드 안에서 곧바로 데이터 멤버를 초기화해도 되기 때문이다.

private:
	std::string mPassengerName = "Unknown Passenger";
	int mNumberOfMiles = 0;
	bool mHasEliteSuperRewardsStatus = false;
};

 

소멸자 초기화

다음은 AirlineTicket 클래스에 대한 소멸자이다

AirlineTicket::~AirlineTicket()
{
    // 특별히 정리할 일이 없다.
}

실제로 할 일이 없을 때는 굳이 소멸자를 작성할 필요는 없다.

주로 파일을 닫거나 메모리를 해제하는 등의 정리 작업이 필요하다면 소멸자를 정의한다.

 

 AirlineTicket 클래스에 정의된 메서드는 다음과 같다.

AirlineTicket::AirlineTicket()
{
	// 데이터 멤버 초기화
	mPassengerName = "Unknown Passenger";
	mNumberOfMiles = 0;
	mHasEliteSuperRewardsStatus = false;
}

AirlineTicket::~AirlineTicket()
{

}

double AirlineTicket::calculatePriceInDollars() const
{
	if (hasEliteSuperRewardsStatus()) {
		// 우수 등급(Elite Super Rewards) 회원에게는 무료 티켓을 제공한다
		return 0;
	}
	// 티켓 가격은 비행 거리에 0.1을 곱한 값이다
	return getNumberOfMiles() * 0.1;
}

const std::string& AirlineTicket::getPassengerName() const
{
	return mPassengerName;
}

void AirlineTicket::setPassengerName(const std::string& name)
{
	mPassengerName = name;
}

int AirlineTicket::getNumberOfMiles() const
{
	return mNumberOfMiles;
}

void AirlineTicket::setNumberOfMiles(int miles)
{
	mNumberOfMiles = miles;
}

bool AirlineTicket::hasEliteSuperRewardsStatus() const
{
	return mHasEliteSuperRewardsStatus;
}

void AirlineTicket::setHasEliteSuperRewardsStatus(bool status)
{
	mHasEliteSuperRewardsStatus = status;
}

'💻프로그래밍 내용 정리 > C++17' 카테고리의 다른 글

[C++ 1.4.0] 유니폼 초기화, 축소 변환  (0) 2022.08.18
[C++ 1.3.2] 클래스 사용하기  (0) 2022.08.17
[C++ 1.2.6] 타입 추론(auto, decltype)  (0) 2022.08.16
[C++ 1.2.5] 익셉션(exception(예외)), throw 구문, catch/try 구문  (0) 2022.08.16
[C++ 1.2.4] 레퍼런스, Const 레퍼런스  (0) 2022.08.16
  • 클래스(class)
  • 접근 수준
  • 생성자와 소멸자
'💻프로그래밍 내용 정리/C++17' 카테고리의 다른 글
  • [C++ 1.4.0] 유니폼 초기화, 축소 변환
  • [C++ 1.3.2] 클래스 사용하기
  • [C++ 1.2.6] 타입 추론(auto, decltype)
  • [C++ 1.2.5] 익셉션(exception(예외)), throw 구문, catch/try 구문
이이프
이이프
게임 프로그래머 지망생 / Since 2022.08.14

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.