태그 글목록: const 객체

[C++ 정리] 클래스 기본형태 및 인라인, const 함수의 사용 2015-06-22

객체지향 프로그래밍을 위해 다음과 같이 클래스를 선언하고 사용한다. 일반적으로 클래스의 선언은 *.h파일에 구현은 *.cpp에 포함 시킨다.

#include "stdafx.h"
#include <iostream>

using namespace std;

// 일반적으로 *.h 파일에 정의
class MyClass
{	
public:
	MyClass();
	// 생성자 오버로딩 (EX1)
	MyClass(int x, int y);
	int getArea();
	int getArea(bool isConst) const;
	// 외부에 선언한 인라인 함수
	void MyClass::inlineFunction();

protected:

private:
	int width;
	int height;
	int area;

};

// - END header

// 일반적으로 *.cpp 파일에 정의
MyClass::MyClass()
{
	width = 0;
	height = 0;
	area = 0;
}

// 생성자로 멤버를 초기화하는 방법 (EX2)
MyClass::MyClass(int x, int y):width(x), height(y), area(x*y){}

// - END cpp

// 넓이를 얻어오는 방법
int MyClass::getArea()
{
	return area;
}

int MyClass::getArea(bool isConst) const
{
	/*
	// - const 함수에서 멤버변수 수정은 불가능하다. (읽기만 가능하다)
	if (isConst)
		area = area + 100;
	*/
	return area;
}

// 외부에 선언한 인라인 함수 (EX3)
inline void MyClass::inlineFunction() 
{
	cout << "인라인함수 테스트" "\n";
}

int _tmain(int argc, _TCHAR* argv[])
{
	// 인자없는 생성자
	MyClass myClass1;
	cout << myClass1.getArea() << "\n";

	// 오버로딩된 생성자
	MyClass myClass2(10,20);
	cout << myClass2.getArea() << "\n";

	// 인라인 함수의 실행
	myClass1.inlineFunction();

	// const 멤버함수 테스트 : const 멤버함수에서는 멤버변수의 값을 변경할 수 없다. (EX4)
	MyClass myClass3(20, 30);
	cout << myClass3.getArea(true) << "\n";

	// const 객체 : const 객체는 const 멤버함수만 호출할 수 있다.
	const MyClass myClass4(30, 40);
	cout << myClass4.getArea(true) << "\n";
	// [ERROR] - 아래는 일반함수를 접근하였기 때문에 에러가 발생한다.
	// cout << myClass4.getArea() << "\n";
	
	return 0;
}
* (EX1) 생성자 또한 오버로딩하여 사용할 수 있다.
* (EX2) ":width(x), height(y), area(x*y)" 와 같이 생성자 구현 부에서 멤버변수를 초기화 할 수 있다.
* (EX3) 인라인 함수를 사용하면 실제로는 main에 함수 내용이 구현되어 있는것과 같이 동작해 성능향상을 가져올 수 있으나 메모리에 로딩하는 것이 부담이 될 정도로 코드가 길다면 역효과를 낼 수 있다.
* (EX4) const 로 선언된 멤버함수에서는 멤버변수의 값을 변경할 수 없다.
* (EX5) const 로 선언된 객체는 const 멤버함수만 호출 가능하다.