이번에는 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 |