예를 들어, 다음과 같은 코드가 있다고 가정합니다.초기화 목록과 관련된 문제 C++
class Foo
{
public:
Foo(int x) : _foo(x)
{
}
private:
int _foo;
protected:
std::string _bar;
};
class Bar : public Foo
{
public:
Bar() : Foo(10), _temp("something"), _bar("something_else")
{
}
private:
std::string _temp;
};
int main()
{
Bar stool;
}
_bar 푸 클래스이며 그렇게 이것은 당신이 그 일을 가겠어요 어떻게하지,이 존재를 알고 나타나지 않기 때문에 코드가 실행되지 않습니다? 아니면 Foo의 생성자에 _bar가 있습니까? 이것은 작동하지만 _bar에 항상 할당 할 필요가없는 것은 무엇입니까?
편집 : 아래는 실제 사용했던 코드입니다.
Entity::Entity(GameState *state, bool collidable)
:_isLoaded(false), _state(state), alive(true), collidable(collidable), name(entityDetault)
{
}
Entity::Entity(GameState *state, bool collidable, entityName _name)
:_isLoaded(false), _state(state), alive(true), collidable(collidable), name(_name)
{
}
후 자식 클래스가이 생성자를 사용합니다;
Player::Player(GameState *state)
: Entity(state,true,entityName::entityPlayer), health(100),bulletSpeed(600),_colour(sf::Color(128,255,86,255))
이제이 모양이 모두 맞습니까? 생성자 본문에서 모든 작업을 수행하는 것보다 약간 낫습니다.
이 경우 초기화하지 않고 단순히 생성자 본문에'bar'를 지정하지 않은 이유는 무엇입니까? – Pubby
신체에서 수행하는 대신 초기화 도구 목록에 변수를 할당하는 것이 더 나은 프로그래밍 연습이라고 들었는데, 정확하지 않습니까? 또는 클래스의 직접 멤버 인 경우에만 init 목록을 사용해야합니까? – user1725794
이니셜 라이저 목록에 * 변수를 지정하지 않으면 할당 연산자 대신 생성자를 사용한다는 것을 의미합니다. 이것은 주요 차이점입니다. 이처럼 간단한 코드 조각에서는 할당이 잘되어야하지만 실제 코드에서는 대답이 달라집니다. – Pubby