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