12.8 Overlapping and delegating constructors
https://www.learncpp.com/cpp-tutorial/overlapping-and-delegating-constructors/
constructor에서 overlapping functionality를 구현하려면 어떻게 해야할까?
The obvious solution doesn’t work
class Foo
{
public:
Foo()
{
// code to do A
}
Foo(int value)
{
Foo(); // use the above constructor to do A (doesn't work)
// code to do B
}
};
위와 같이 하는 방법은 그럴싸 하지만 작동하지 않는다
Delegating constructors
class Foo
{
private:
public:
Foo()
{
// code to do A
}
Foo(int value): Foo{} // use Foo() default constructor to do A
{
// code to do B
}
};
member init list에서 호출하는 것은 가능하다
이를 delegating constructor라고 한다 (delegate 위임하다)
여기 다른 예시다
#include <string>
#include <iostream>
class Employee
{
private:
int m_id{};
std::string m_name{};
public:
Employee(int id=0, const std::string &name=""):
m_id{ id }, m_name{ name }
{
std::cout << "Employee " << m_name << " created.\n";
}
// Use a delegating constructor to minimize redundant code
Employee(const std::string &name) : Employee{ 0, name }
{ }
};
Resetting class
default 값으로 class를 다시 되돌리고 싶으면 아래와 같이 할 수 있다
#include <iostream>
class Foo
{
private:
int m_a{ 5 };
int m_b{ 6 };
public:
Foo()
{
}
Foo(int a, int b)
: m_a{ a }, m_b{ b }
{
}
void print()
{
std::cout << m_a << ' ' << m_b << '\n';
}
void reset()
{
*this = Foo(); // create new Foo object, then use assignment to overwrite our implicit object
}
};
int main()
{
Foo a{ 1, 2 };
a.reset();
a.print();
return 0;
}
Author And Source
이 문제에 관하여(12.8 Overlapping and delegating constructors), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@ikmy0ung/12.8-Overlapping-and-delegating-constructors저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)