Computer Security

#7 정적멤버,상수멤버 본문

프로그래밍/C++

#7 정적멤버,상수멤버

쿠리 Kuri 2022. 6. 18. 18:30

정적 멤버
정적 멤버(Static Member)란 클래스에는 포함 되어 있는 멤버이지만 모든 객체가 공유하는 멤버이다.

정적으로 선언된 멤버는 메모리 상에 오직 하나만 할당되어 관리된다.
정적 멤버를 public으로 선언하면 외부의 어떠한 클래스에서 접근이 가능하며, 오직 하나만 관리된다.

 

코드 예시

#include <iostream>
#include <string>

using namespace std;

class Person {
private:
	string name;
public:
	static int count;
	Person(string name) : name(name) {
		count++;
	}
};
int Person::count = 0;
int main(void) {
	Person p1("고동산");
	Person p2("2동산");
	Person p3("3동산");
	Person p4("4동산");
	Person p5("5동산");
	cout << "사람의 수: " << Person::count << '\n';
		system("pause");
}

위 코드를 보면, 보통 클래스가 몇명선언 되었는지 확인 할 때 유용하다.

 

결과 값

 


상수 멤버


상수 멤버(Constant Member)는 호출된 객체의 데이터를 변경할 수 없는 멤버를 의미한다.

일반적으로 클래스에서 사용되는 중요한 상수는 상수 멤버 변수로 정의해서 사용하는 관행이 있다.

 

코드 예시

#include <iostream>
#include <string>

using namespace std;

class Person {
private:
	const int id;
	string name;
public:
	static int count;
	Person(int id, string name) : id(id), name(name) {
		count++;
	}
	/*
	void setId(int id) {
	this->id = id; // 오류 발생 [수정 불가능]
	}
	*/
};
int Person::count = 0;
int main(void) {
	Person p1("고동산");
	Person p2("2동산");
	Person p3("3동산");
	Person p4("4동산");
	Person p5("5동산");
	cout << "사람의 수: " << Person::count << '\n';
		system("pause");
}

위 코드 처럼 짜게 되면, id 앞에 const 즉, 상수취급이 되면서 id는 한번 선언되면 바뀌지 못한다.

따라서, 정상적으로 코드를 짜기 위해선 id 값 마다 고유의 값을 부여 해야 한다.

 

코드 예시

#include <iostream>
#include <string>

using namespace std;

class Person {
private:
	const int id;
	string name;
public:
	static int count;
	Person(int id, string name) : id(id), name(name) {
		count++;
	}
	/*
	void setId(int id) {
	this->id = id; // 오류 발생 [수정 불가능]
	}
	*/
};
int Person::count = 0;
int main(void) {
	Person p1(1,"고동산");
	Person p2(2,"2동산");
	Person p3(3,"3동산");
	Person p4(4,"4동산");
	Person p5(5,"5동산");
	cout << "사람의 수: " << Person::count << '\n';
		system("pause");
}

결과 값

 

'프로그래밍 > C++' 카테고리의 다른 글

#9 다형성 기법 2  (0) 2022.06.20
#8 C++ 다형성 기법 1  (0) 2022.06.19
#6 C++ 프렌드  (0) 2022.06.17
#5 C++ 오버로딩  (0) 2022.06.16
#4 C++ 클래스 상속  (0) 2022.06.15
Comments