언어 자료구조 알고리즘/디딤돌 C++

18. 상수화 멤버

언제나휴일 2016. 1. 27. 19:49
반응형
안녕하세요. 언제나 휴일, 언휴예요.
이번에는 const 키워드를 붙여 선언하는 상수화 멤버에 관해 알아보기로 해요.

 

클래스를 정의할 때 멤버 필드 앞에 const를 붙여서 선언한 것을 상수화 멤버라고 말합니다. 비 정적 상수화 멤버 필드는 생성자에서 반드시 초기화 기법으로 상수 값을 설정해야 합니다. 그리고 정적 상수화 멤버 필드는 클래스 외부 선언에서 초기값을 지정해야 합니다.
class Student
{
    const int num; //비 정적 상수화 멤버 필드
    string name;
    int hp;
    static const int max_hp; //정적 상수화 멤버 필드
public:
    Student(int _num,string _name);   
};
 
const int Student::max_hp=200; //정적 상수화 멤버 필드 초기값 지정
Student::Student(int _num,string _name):num(_num)//비 정적 상수화 멤버 필드 초기화
{
    name = _name;
}
 
예를 들어 학생 생성 시에 학번을 부여하고 이후에는 학번을 변경하지 못하게 상수 멤버 필드로 사용할 수 있습니다. 또 다른 예로 학생의 iq가 최대 200까지만 올라갈 수 있게 하려고 한다면 static 상수 멤버 필드로 정할 수 있습니다.
 
그리고 비 정적 멤버 메서드 선언 뒤에 const 키워드를 붙인 것을 상수화 멤버 메서드라 부릅니다. 상수화 멤버 메서드는 비 정적 멤버 메서드에만 사용할 수 있으며 메서드 내부에서는 개체의 상태를 바꿀 수 없습니다. 따라서 상수화 멤버 메서드에서는 멤버 필드 값을 변경할 수 없습니다. 주의할 점은 상수화 멤버 메서드는 클래스 외부 함수 정의문에도 반드시 const 키워드를 붙여야 합니다.
 
//Student.h
#pragma once
#include <iostream>
#include <string>
using namespace std;
class Student
{
    const int num; //비 정적 상수화 멤버 필드
    string name;
    int hp;
    static const int max_hp; //정적 상수화 멤버 필드
public:
    Student(int _num,string _name);   
    void View()const;//상수화 멤버 메서드
};
 
//Student.cpp
#include "Student.h"
 
const int Student::max_hp=200; //정적 상수화 멤버 필드 초기값 지정
Student::Student(int _num,string _name):num(_num)//비 정적 상수화 멤버 필드 초기화
{
    name = _name;
    hp = 0;
}
void Student::View()const//상수화 멤버 메서드
{
    cout<<"번호:"<<num<<" 이름:"<<name<<" HP:"<<hp<<endl;
}
 
//Program.cpp
#include "Student.h"
int main()
{
    Student *stu = new Student(3,"홍길동");
    stu->View();

    delete stu;

    return 0;
}
 
실행 결과
번호:3 이름:홍길동 HP:0

반응형

'언어 자료구조 알고리즘 > 디딤돌 C++' 카테고리의 다른 글

23. 캡슐화 최종 실습 - 멤버 필드  (0) 2016.01.27
22. 캡슐화 최종 실습 - 시나리오  (0) 2016.01.27
21. 캡슐화 실습2 - 학생  (4) 2016.01.27
20. 캡슐화 실습1 - 복소수  (2) 2016.01.27
19. 특별한 멤버 this  (0) 2016.01.27
17. 정적(static) 멤버  (0) 2016.01.27
16. 생성자, 소멸자  (0) 2016.01.27
15. 접근 지정자  (0) 2016.01.27
14. 캡슐화 개요  (0) 2016.01.27
13. OOP 개요  (0) 2016.01.27