C++

최기수·2021년 7월 26일
0

Computer Science

목록 보기
4/5

Call by reference

함수를 호출하는 방식으로는 다음과 같이 세 가지가 존재한다.

  • Call by value : 값에 의한 전달
  • Call by address : 주소에 의한 전달 (ex. Pointer)
  • Call by reference : 참조에 의한 전달 (ex. Reference)

아래는 Call by reference에 대한 예시이다.

#include <iostream>

class Person {
 public:
  Person(const std::string &name, int age);
  
  std::string get_name() { return this->name; }
  int get_age() { return this->age; }
  void change_name(const std::string &name) { this->name = name; }
  void change_age(int age) { this->age = age; }

 private:
  std::string name;
  int age;
};

Person::Person(const std::string &name, int age) {
  this->name = name;
  this->age = age;
}

void changeInfo(Person &p1, Person &p2) {
  Person p3 = p1;
  
  std::cout << "[changeInfo before] p1's info         : ["
    << p1.get_name() << ", " << p1.get_age() << "], p2's info   : ["
    << p2.get_name() << ", " << p2.get_age() << "]" << std::endl;
  
  p1 = p2;
  p2 = p3;

  std::cout << "[changeInfo after]  p1's info         : ["
    << p1.get_name() << ", " << p1.get_age() << "],       p2's info   : ["
    << p2.get_name() << ", " << p2.get_age() << "]" << std::endl;
}

int main() {
  Person guitarggun("guitarggun", 29);
  Person john("john", 20);
  
  std::cout << "[before]            guitarggun's info : ["
    << guitarggun.get_name() << ", " << guitarggun.get_age()
    << "], john's info : [" << john.get_name() << ", " << john.get_age() << "]"
    << std::endl;
  
  changeInfo(guitarggun, john);
  
  std::cout << "[after]             guitarggun's info : ["
    << guitarggun.get_name() << ", " << guitarggun.get_age()
    << "],       john's info : [" << john.get_name() << ", " << john.get_age()
    << "]" << std::endl;
  
  return 0;
}

이상으로 C++을 마칩니다.

0개의 댓글