객체지향 프로그래밍을 위해 다음과 같이 클래스를 선언하고 사용한다. 일반적으로 클래스의 선언은 *.h파일에 구현은 *.cpp에 포함 시킨다.
001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 040 041 042 043 044 045 046 047 048 049 050 051 052 053 054 055 056 057 058 059 060 061 062 063 064 065 066 067 068 069 070 071 072 073 074 075 076 077 078 079 080 081 082 083 084 085 086 087 088 | #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 멤버함수만 호출 가능하다.