C++ Chapter 8.13 : 익명 객체
카테고리: Cpp
태그: Cpp Programming
인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!
chapter 8. 객체 지향의 기초 : 익명 객체
🔔 익명 객체를 사용하는 경우
class A
{
public:
void print()
{
cout << "Hello" << endl;
}
}
int main()
{
A a;
a.print();
}
- A 타입의 객체는 멤버로 print() 함수 하나만 가지고 있기 때문에
- 이 함수를 사용할 때마다 A a; 객체를 생성해주어야 하는 과정이 번거롭다.
- 어차피 print() 함수 하나만 쓸텐데.. 😥
🔔 익명 객체 사용하기
그냥 생성자만 호출하면 되고 바로
.
으로 멤버를 호출하면 된다.
A().print();
A()
.print();A()
- 이름 없는 A 타입의
익명 객체
가 생성 됐다. - 매개 변수 없는 디폴트 생성자를 호출하고 있다.
- 이 익명 객체로 print() 멤버 함수를 호출하고 있다.
- 이름 없는 A 타입의
🔔 익명 객체 특징
- 익명 객체는 R-Value로서 작동한다.
- 따라서 익명 객체는 생성되고 멤버를 호출한 후 실행이 끝나자마자 바로 사라진다.
- 아래 두 개의 a.print() 는 둘 다
a
객체에서 호출된 것이다.a
의 생성자만 한번 호출된다.A a; a.print(); a.print();
- 아래 두 개의 A().print() 는 각자 다른 객체에서 호출된 함수다.
- 첫번째 A().print()
- 익명 객체
A()
가 생성되면서 생성자가 한번 호출되고 - A().print() 의 실행이 끝나자마자 익명 객체
A()
의 소멸자가 호출되고 메모리 해제된다.
- 익명 객체
- 두번째 A().print()
- 익명 객체
A()
가 생성되면서 생성자가 한번 호출되고 - A().print() 의 실행이 끝나자마자 익명 객체
A()
의 소멸자가 호출되고 메모리 해제된다.
- 익명 객체
- 총 두 번의 생성자, 두 번의 소멸자가 호출된다.
A().print(); A().print();
- 첫번째 A().print()
🔔 예제
class Cents
{
private:
int m_cents;
public:
Cents(int cents) {m_cents = cents;} // Cents 클래스의 생성자
int getCents() const {return m_cents;} // 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;
}
cout << add(Cents(6), Cents(8)).getCents() << endl;
- 일반 함수 add 는 Cents 타입의 객체 2 개를 매개변수로 받아 Cents 타입의 R-value로 익명 객체를 리턴하는 함수다.
Cents(6)
,Cents(8)
2개의 익명 객체를 매개 변수로 넘겨- 매개변수 1개짜리 생성자를 호출했다.
- 결과 값을 리턴받는데
- Cents(c1.getCents() + c2.getCents()) 를 리턴 받으므로 리턴값 또한 익명객체다.
- 리턴된 Cents 타입의 익명 객체로 *getCents()*를 호출한다.
🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄
댓글 남기기