- 8.13.1 익명 객체(Anonymous Objects)
8.13.1 익명 객체(Anonymous Objects)
객체에 특정 이름을 붙여서 인스턴스화를 하지 않고 멤버 함수를 사용할 수 있는 방법이 존재하는데 바로 익명 객체를 사용하는 것이다.
#include <iostream>
using namespace std;
class A
{
public:
int m_value;
A(const int& input)
: m_value(input)
{
cout << "Constructor" << endl;
}
~A()
{
cout << "Destructor" << endl;
}
void print()
{
//cout << "Hello" << endl;
cout << m_value << endl;
}
};
int main()
{
A a(3);
a.print();
A(1).print(); // 생성자 소멸자 호출
A(2).print(); // 생성자 소멸자 호출
return 0;
}
위의 코드를 실행시켜보면 두 번째와 세 번째 멤버 함수를 호출할 때 생성자와 소멸자를 호출하는 것을 볼 수가 있다. 첫 번째 멤버 변수의 경우 인스턴스화를 하면서 변수에 이름을 짓게 되는데, 그 외의 함수를 호출할 때는 그러지 않았다. 이처럼 익명 객체를 사용하게 되면 객체를 생성해서 멤버 함수를 사용하고 바로 파괴하는 과정을 거치게 된다.
#include <iostream>
using namespace std;
class Cents
{
private:
int m_cents;
public:
Cents(int cents)
{
m_cents = cents;
}
// 멤버 변수를 변경하지 않기 때문에 const가 붙는다.(멤버 함수에 붙는다.)
int getCents() const
{
return m_cents;
}
};
Cents add(const Cents& c1, const Cents& c2)
{
return Cents(c1.getCents() + c2.getCents());
}
int main()
{
cout << add(Cents(6), Cents(8)).getCents() << endl;
return 0;
}
이런 방식으로 익명 객체를 활용할 수도 있겠다. 함수 뒤에 const는 멤버 함수가 멤버 변수를 변경하지 않는다는 의미를 컴파일러에게 표시해주는 것으로 유지보수에 도움이 되니 기억해두도록 하자! 참고로 개발자 면접에도 간혹 나오는 개념이다!
'Programming Language > C++' 카테고리의 다른 글
Section 8.2. 캡슐화, 접근 지정자, 접근 함수 (0) | 2022.01.19 |
---|---|
Section 8.1. 객체지향 프로그래밍과 클래스 (0) | 2022.01.18 |
Section 4.7. 열거형 타입 enum (0) | 2021.11.28 |
Section 4.6. string 문자열 사용 (0) | 2021.11.27 |
Section 4.5. 암시적 형 변환과 명시적 형 변환 (0) | 2021.11.16 |