2013-02-27 3 views
0

이것은 바보 같은 질문 일 수 있으며 웹에서 대답을 찾지 못했기 때문에 대답이 '아니오'인 것 같아요.C++ 클래스 인수 기본 상수 초기화

class A{ 
    public: 
     A(); 
    private: 
     std::string a("a"); 
}; 

내가이 (가) 인수를 설정하려는에 "A"클래스 생성자를 호출하지 않고 :

내가 클래스가 있습니다. 그 이유는 내가 진짜 클래스이기 때문에 나는 많은 다른 생성자와 항상 같은 (상수) 값을 가질 많은 인자를 가지고있다. 그리고 언젠가 내가 "a"를 "b"로 대체하기로 결정했다면 나는 모든 생성자를 수정하고 싶지 않습니다. 게다가, 나는 그것이 내 수업에만 존재하기를 바란다.

답변

3

C++ (11)이 선언의 시점에서 비 정적 멤버 변수를 초기화 할 수있는 옵션이 있습니다 :

class A{ 
public: 
    A(); 
private: 
    std::string a = "a"; // curly braces allowed too: std::string a{"a"}; 
}; 

C + 또한 +11은 위임자 생성자를 추가하므로 다른 생성자에서 클래스의 생성자를 호출 할 수 있습니다. 그렇지 않으면

#include <iostream> 
#include <string> 

struct Foo 
{ 
    Foo() : a("Hello, Foo!") {} 
    Foo(int) : Foo() {} 
    Foo(int, int) : Foo() {} 
    std::string a; 
}; 

int main() 
{ 
    Foo f1(42); 
    Foo f2 (1,2); 
    std::cout << f1.a << "\n"; 
    std::cout << f2.a << "\n"; 
} 

를 다른 대답에 제안 생성자 초기화 목록을 사용 : 이것은 단지 한 곳에서 a을 초기화 할 수

class A{ 
public: 
    A() : a("a") {} 
private: 
    std::string a; 
}; 
+0

감사, 좋아, 그래서 난 = 기호를 사용할 필요가 그리고() ... – PinkFloyd

+0

내가 초기화리스트를 사용하고 싶지 않다고 말했기 때문에 ... – PinkFloyd

+0

@ user2110463 또는'{}'문법. '()'는 함수로 파싱 될 수 있기 때문에 허용되지 않습니다. C++ 11은 또한 단지 한 곳에서만'a'를 설정할 수있는 위임자 생성자를 제공합니다. 나는 예제를 추가 할 것이다. – juanchopanza

0

당신은 클래스 생성자 initializer list에 초기화 :에서

A::A() 
    : a("a") 
{ 
}