객체지향 프로그래밍을 위해 다음과 같이 클래스를 선언하고 사용한다. 일반적으로 클래스의 선언은 *.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 멤버함수만 호출 가능하다.