Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

SYDev

C++ Chapter 03-2 : 클래스(Class)와 객체(Object)(3) 본문

Programming Lang/C++

C++ Chapter 03-2 : 클래스(Class)와 객체(Object)(3)

시데브 2023. 7. 13. 11:00

헤더파일과 인라인 함수

 인라인 함수는 컴파일 과정에서 함수의 호출 문이 있는 곳에 함수의 몸체 부분이 삽입되어야 하므로, 클래스의 선언과 동일한 위치에 선언되어 컴파일러가 동시에 참조할 수 있게 해야 한다.

 

 이와 관련된 다음 예제를 살펴보자.

 

 파일명 : CarInline.h

#ifndef __CARINLINE_H__
#define __CARINLINE_H__

#include <iostream>
using namespace std;

namespace CAR_CONST
{
    enum
    {
        ID_LEN = 20,
        MAX_SPD = 200,
        FUEL_STEP = 2,
        ACC_STEP = 10,
        BRK_STEP = 10
    };
}

class Car 
{
private: 
    char gamerID[CAR_CONST::ID_LEN]; 
    int fuelGauge; 
    int curSpeed; 
public: 
    void InitMembers(char * ID, int fuel);
    void ShowCarState();
    void Accel();
    void Break();

};

inline  void Car::Break()
{
    if (curSpeed < CAR_CONST::BRK_STEP)
    {
        curSpeed = 0;
        return;
    }

    curSpeed -= CAR_CONST::BRK_STEP;
}

inline void Car::ShowCarState()
{
    cout<<"소유자 ID: "<<gamerID<<endl;
    cout<<"연료량: "<<fuelGauge<<"%"<<endl;
    cout<<"현재속도: "<<curSpeed<<"km/s"<<endl;
}

#endif

 

 파일명 : CarInline.cpp

#include <iostream>
#include <cstring>
#include "CarInline.h"
using namespace std;

void Car::InitMembers(char * ID, int fuel) 
{
    strcpy(gamerID, ID);
    fuelGauge=fuel;
    curSpeed=0;
}

void Car::Accel()
{
    if (fuelGauge <= 0)
        return;
    else
        fuelGauge -= CAR_CONST::FUEL_STEP;

    if (curSpeed + CAR_CONST::ACC_STEP >= CAR_CONST::MAX_SPD)
    {
        curSpeed = CAR_CONST::MAX_SPD;
        return;
    }

    curSpeed += CAR_CONST::ACC_STEP;
}

 

 파일명 : RacingInlineMain.cpp

#include "CarInline.h"

int main(void)
{
    Car run99;
    run99.InitMembers("run99", 100); 
    run99.Accel();
    run99.Accel();
    run99.Accel();
    run99.ShowCarState();
    run99.Break();
    run99.ShowCarState();

    return 0;
}

 


출처 : 윤성우, <윤성우의 열혈 C++ 프로그래밍>, 오렌지미디어, 2010.05.12