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

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

댓글 남기기