1. 접근 지정자
1) 접근 지정자
- 캡슐화의 목적
- 객체 보호, 보안
- C++에서 객체의 캡슐화 전략
- 객체의 상태를 나타내는 멤버 변수에 대한 보호
- 중요한 멤버는 다른 클래스나 객체에서 접근할 수 없도록 보호
- 외부와의 인터페이스를 위해서 일부 멤버는 외부에 접근 허용
- 멤버에 대한 3가지 접근 지정자
- private (디폴트 값)
- 동일한 클래스의 멤버 함수에만 제한
- 클래스 밖에서 직접 접근 불가
- 멤버 변수는 private으로 지정하는 것이 바람직
- protected
- 클래스 자신과 상속받은 자식 클래스에만 허용
- public
- 모든 다른 클래스에 허용
- 클래스 밖에서 직접 접근 가능
- 모든 다른 클래스에 허용
- private (디폴트 값)
class Sample {
private:
// private 멤버 선언
public:
// public 멤버 선언
protected:
// protected 멤버 선언
};
2) 구조체 vs 클래스
- 구조체는 상속, 멤버, 접근 지정 등 모든 것이 클래스와 동일
- 유일하게 다른 것은 구조체의 디폴트 접근 지정이 public
2. static 멤버
1) 클래스의 멤버
- static 멤버
- 프로그램이 시작할 때 생성
- 클래스 당 하나만 생성, 클래스 멤버라고 불림
- 클래스의 모든 객체들이 공유하는 멤버
- static 멤버에 대한 외부 선언이 필요
- 없으면 에러 발생
- nonstatic 멤버
- 객체가 생성될 때 함께 생성
- 객체마다 객체 내에 생성
class Person {
public:
double money; // 개인 소유의 돈
void addMoney(int money)
{
this->money += money;
}
static int sharedMoney; // 공금이라는 static멤버 변수 선언
static void addShared(int n) //static멤버 함수 선언
{
sharedMoney += n;
}
};
int Person::sharedMoney = 10; // sharedMoney를 10으로 초기화(static멤버 변수 공간 할당)
2) static 멤버 사용
- static 멤버 변수
- 같은 클래스의 객체들 사이에 공유되는 멤버 변수
- 보통 멤버처럼 접근할 수 있음
- 클래스 이름과 범위 지정자(::)로 접근
window w1;
strcpy(w1.desktop,”HH”);
strcpy(window::desktop,”HH”);
- static 멤버 함수
- 객체 없이 호출할 수 있는 멤버 함수
- 보통 멤버함수처럼 객체 이름이나 포인터로 접근 가능
- 클래스 이름과 범위 지정자(::)로 접근
- this 포인터가 없음
- 멤버 함수는 객체의 소유가 아님
window *w2;
w2 = &w1;
w2→closeAll();
window::closeAll();
- 객체의 멤버로 접근
- 객체.static멤버
- 객체 포인터 -> static멤버
Person lee;
lee.sharedMoney = 500; // 객체.static멤버 방식
Person *p;
p = &lee;
p→addShared(200); // 객체포인터→ static멤버 방식
- Ex) static 예제
#include <iostream>
using namespace std;
class Person {
public:
double money; // 개인 소유의 돈
void addMoney(int money) {
this->money += money;
}
static int sharedMoney; // 공금
static void addShared(int n) {
sharedMoney += n;
}
};
// static 변수 생성. 전역 공간에 생성
int Person::sharedMoney=10; // 10으로 초기화
// main() 함수
int main()
{
Person han;
han.money = 100; // han의 개인 돈=100
han.sharedMoney = 200; // static 멤버 접근, 공금=200
Person lee;
lee.money = 150; // lee의 개인 돈=150
lee.addMoney(200); // lee의 개인 돈=350
lee.addShared(200); // static 멤버 접근, 공금=400
cout << han.money << ' ' << lee.money << endl;
cout << han.sharedMoney << ' ' << lee.sharedMoney << endl;
}
'프로그래밍 언어 > C++' 카테고리의 다른 글
8) 함수와 참조, 복사생성자 (0) | 2023.12.08 |
---|---|
7) 여러가지 객체의 생성 방법 (1) | 2023.11.03 |
5) 생성자와 소멸자 (0) | 2023.11.01 |
4) 클래스와 객체의 기본 (1) | 2023.11.01 |
3) 개선된 함수 기능 (0) | 2023.11.01 |