프로그래밍 언어/C++

C ++에서 다른 생성자 (생성자 체인)에서 생성자를 호출 하는 방법

Rateye 2021. 7. 7. 10:23
728x90
반응형

 

질문 : C ++에서 다른 생성자 (생성자 체인)에서 생성자를 호출 할 수 있습니까?

C # 개발자로서 저는 생성자를 통해 실행하는 데 익숙합니다.

class Test {
    public Test() {
        DoSomething();
    }

    public Test(int count) : this() {
        DoSomethingWithCount(count);
    }

    public Test(int count, string name) : this(count) {
        DoSomethingWithName(name);
    }
}

C ++에서이 작업을 수행하는 방법이 있습니까?

클래스 이름을 호출하고 'this'키워드를 사용해 보았지만 둘 다 실패했습니다.

답변

C ++ 11 : 예!

C ++ 11 이상에는 이와 동일한 기능 ( 위임 생성자 라고 함)이 있습니다.

구문은 C #과 약간 다릅니다.

class Foo {
public: 
  Foo(char x, int y) {}
  Foo(int y) : Foo('a', y) {}
};

C ++ 03 : 아니요

불행히도 C ++ 03에서는이 작업을 수행 할 수있는 방법이 없지만이를 시뮬레이션하는 방법에는 두 가지가 있습니다.

  1. 기본 매개 변수를 통해 두 개 이상의 생성자를 결합 할 수 있습니다.
    class Foo {
    public:
      Foo(char x, int y=0);  // combines two constructors (char) and (char, int)
      // ...
    };
  2. init 메소드를 사용하여 공통 코드를 공유하십시오.
    class Foo {
    public:
      Foo(char x);
      Foo(char x, int y);
      // ...
    private:
      void init(char x, int y);
    };
    
    Foo::Foo(char x)
    {
      init(x, int(x) + 7);
      // ...
    }
    
    Foo::Foo(char x, int y)
    {
      init(x, y);
      // ...
    }
    
    void Foo::init(char x, int y)
    {
      // ...
    }

 

 

참조를 위해 C ++ FAQ 항목 을 참조하십시오.

출처 : https://stackoverflow.com/questions/308276/can-i-call-a-constructor-from-another-constructor-do-constructor-chaining-in-c
728x90
반응형