C++/๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (OOP)

[C++] ํด๋ž˜์Šค ๋ฉค๋ฒ„ ์ ‘๊ทผํ•˜๊ธฐ (Accessing Class Members)

Chan Lee 2023. 12. 26. 23:33

์•„์‹œ๋‹ค์‹œํ”ผ ํด๋ž˜์Šค์—๋Š” ์†์„ฑ 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 ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค๋Š” ๊ฒƒ์„ ์œ ์˜ํ•ด์ฃผ์„ธ์š”!