Programming Language/C,C++

C++] 참조에 의한 호출로 객체 전달

TwinParadox 2017. 6. 21. 00:00
728x90





#include <iostream>
using namespace std;
 
class Circle
{
private:
    int radius;
public:
    Circle();
    Circle(int r);
    ~Circle();
    double getArea()
    {
        return 3.14*radius*radius;
    }
    int getRadius()
    {
        return radius;
    }
    void setRadius(int radius)
    {
        this->radius = radius;
    }
};
 
Circle::Circle()
{
    radius = 1;
    cout << "생성자 실행 radius = " << radius << endl;
}
Circle::Circle(int radius)
{
    this->radius = radius;
    cout << "생성자 실행 radius = " << radius << endl;
}
Circle::~Circle()
{
    cout << "소멸자 실행 radius = " << radius << endl;
}
 
void increase(Circle &c)
{
    int r = c.getRadius();
    c.setRadius(r + 1);
}
 
int main()
{
    Circle waffle(30);
    increase(waffle);
    cout << waffle.getRadius() << endl;
}


값에 의한 호출로 객체를 매개 변수에 전달 시,


1. 함수 내에서 매개 변수 객체를 변경할 경우, 원본 객체 변경시키지 않음.

2. 매개 변수 객체의 생성자가 실행되지 않고 소멸자만 실행되는 비대칭구조로 작동함.


하지만,

참조에 의한 호출은 다음 두 가지 사항에 완전히 다르게 작동


1. 참조 매개 변수로 이뤄진 모든 연산은 원본 객체에 대한 연산

2. 참조 매개 변수는 이름만 생성되어 생성자와 소멸자는 아예 실행되지 않음.

728x90
728x90

'Programming Language > C,C++' 카테고리의 다른 글

C++] 일반화와 템플릿  (0) 2017.06.28
C++] 추상 클래스  (0) 2017.06.26
C] memset, memcmp  (0) 2017.06.04
C++] 다중상속(Multiple Inheritance)  (0) 2017.06.03
C++] RTTI(Run-Time Type Information)  (0) 2017.06.02