일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 배열
- Object Oriented Programming
- baekjoon
- 포인터
- OOP
- pass by reference
- pointer
- Class
- vscode
- raw data
- Pre-processing
- const
- assignment operator
- C++
- Deep Learning
- function
- programming
- Data Science
- 함수
- 파이썬
- Python
- 알고리즘
- 백준
- 티스토리챌린지
- 문자열
- string
- 오블완
- 반복문
- predictive analysis
- array
- Today
- Total
Channi Studies
[C++] 클래스 멤버 접근하기 (Accessing Class Members) 본문
아시다시피 클래스에는 속성 attributes 와 메소드 methods 가 존재합니다.
이것들을 클래스 멤버 라고 부르는데요,
클래스 멤버들에 접근하기 위해서는 어떻게 해야 할까요?
바로 각 객체들의 이름 뒤에 dot operator(.) 를 사용합니다.
은행 계좌 관리용 Account 클래스를 통해 ricky_account라는 객체를 만들었습니다.
그리고 ricky_account.balance, ricky_account.deposit(double)으로 각각
속성과 메소드를 호출하였습니다.
Account ricky_account;
ricky_account.balance;
ricky_account.deposit(1000.00);
그렇다면 동적으로 만들어진 객체에 대해서는 어떻게 할까요?
두가지 방법이 있습니다.
Account ricky_account = new Account; // 객체 동적 선언
// 방법 1
(*ricky_account).balance;
(*ricky_account).deposit(1000.00);
// 방법 2
ricky_account->balance;
ricky_account->deposit(1000.00);
위의 방법과 같이 dot operator을 쓰는 방법 외에도
pointer operator(arrow operator)을 사용하는 방법도 존재합니다.
하지만 위와 같이 접근하여 출력하려고 하면 컴파일러 에러가 발생할 것 입니다.
그것은 접근 제한자를 public으로 설정하지 않아서입니다.
class Account {
public:
double balance;
void deposit(double amount);
};
클래스를 선언할 때 다음과 같이 public: 키워드를 사용한다면,
외부에서 객체의 데이터에 대한 접근을 허가합니다.
이에 대한 자세한 정보는 다음 포스트에서 다루겠습니다.
다시 돌아와서, 예시 코드를 살펴보겠습니다.
#include <iostream>
#include <string>
class Player {
public:
string name;
int xp;
int hp;
void talk(string text_to_say) {
cout << name << " says: " << text_to_say << endl;
}
};
int main() {
Player ricky;
ricky.name = "Ricky";
ricky.xp = 0;
ricky.hp = 1000;
ricky.talk("Hello, there"); // Output: Ricky says: Hello, there
Player *enemy = new Player;
enemy->name = "Enemy"; // arrow operator
(*enemy).xp = 10; // dot operator
enemy->hp = 500;
enemy->talk("I Love You"); // Output: Enemy says: I Love You
delete enemy;
return 0;
}
오늘 배운 방법으로 Player 클래스를 활용한 짧은 코드입니다.
클래스 멤버들에 접근하는 방법들이 쉽게 나타나있습니다.
정적 개체와 달리 동적 할당된 개체들은 arrow operator을 사용하거나 dereference 과정을 거친다는 것을 유의해주세요!
'C++ > 객체지향 프로그래밍 (OOP)' 카테고리의 다른 글
[C++] 함수 혹은 메소드에서 객체의 불필요한 복사를 방지하기 (0) | 2023.12.29 |
---|---|
[C++] 생성자 초기화 리스트 (Constructor Initialization List), 생성자 오버로딩 (0) | 2023.12.28 |
[C++] 헤더가드 (header guards) | #pragma once, #ifndef (2) | 2023.12.28 |
[C++] 클래스와 객체 (0) | 2023.12.26 |
[C++] 객체 지향 프로그래밍 | Object Oriented Programming (OOP) (0) | 2023.12.26 |