기본 클래스 생성자에 매개 변수를 전달할 때 멤버 초기화

Megamozg

아래 코드에서 기본 클래스를 만들 때 초기화되지 않은 클래스 멤버에 값을 할당합니다. 이로 인해 런타임 오류가 발생하지 않은 이유는 무엇입니까?

class Foo {
public:
    Foo(std::string) {}
};

class Bar : public Foo {
public:
    Bar() : Foo(s = f()) {} // assigning to uninitialized class member

    void print() { 
        std::cout << s << std::endl; 
    }
    std::string f() {
        return "Some string";
    }

private:
    std::string s;
};

int main()
{
    Bar b;
    b.print();
    return 0;
}

그러나 Bar 클래스에 다른 멤버를 추가하면 Foo 클래스 생성시 오류가 발생합니다.

Class Bar {

// same as above

private:
    std::string s;
    int a;        // adding another member
};

왜 이런 일이 발생합니까?

개미

"런타임 에러"? 초기화되지 않은 구성원에 할당 할 때 "런타임 오류"가 없습니다. C ++에서 "초기화되지 않음"상태는 런타임에 감지되지 않으므로 "런타임 오류"와 같은 결정적인 방식으로 처리 할 수 ​​없습니다.

이와 같은 작업을 수행하면 코드가 정의되지 않은 동작을 나타냅니다 . 이 정의되지 않은 동작이 그 자체로 드러날 거리는 예측할 수 없습니다. 클래스에서 다른 멤버를 선언하는 것과 같이 완전히 관련이없는 요소에 쉽게 민감 할 수 있습니다. 그게 전부입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

오버로드 된 메서드에 매개 변수로 전달할 때 기본 클래스와 파생 클래스를 구분합니다.

분류에서Dev

클래스 멤버 함수 / 변수로 기본 매개 변수 초기화

분류에서Dev

복사 생성자를 사용할 때 복사 생성자 전에 클래스 데이터 멤버가 초기화됩니까?

분류에서Dev

자바 스크립트의 기본 클래스에 초기화 매개 변수를 전달하는 방법

분류에서Dev

클래스 멤버 변수를 다른 클래스 멤버 변수에 초기화 / 할당

분류에서Dev

(복사 생성자) 다른 개체를 초기화하기 위해 매개 변수로 전달 된 개체가 개인 멤버에 액세스 할 수있는 방법은 무엇입니까?

분류에서Dev

하위 클래스 생성자에서 부모 클래스의 개인 멤버를 초기화하는 방법

분류에서Dev

파생 클래스는 기본 클래스의 개인 멤버를 다른 기본 클래스의 개인 멤버로 오버로드 할 수 없습니다.

분류에서Dev

초기화 목록을 사용할 때 생성자에 전달 된 매개 변수 확인-C ++

분류에서Dev

합성 된 기본 생성자는 이미 초기화 된 클래스 멤버를 어떻게 초기화 할 수 있습니까?

분류에서Dev

Swift에서 매개 변수로 전달 된 클래스를 기반으로 동적 초기화 달성

분류에서Dev

Dart Flutter : 클래스 생성자에 기본값을 설정할 때 선택적 매개 변수의 기본값은 일정해야합니다.

분류에서Dev

생성자에 개체를 설치할 때 C ++ 클래스 멤버 범위

분류에서Dev

클래스 생성자에서 멤버를 초기화하는 약어

분류에서Dev

C ++-파생 클래스에서 정적으로 기본 클래스 보호 멤버 변수 초기화

분류에서Dev

클래스 생성자에서 초기화 된 ofstream 유형의 멤버 변수를 사용할 수 있습니까?

분류에서Dev

파생 클래스 속성을 Angular의 기본 클래스 생성자에 전달할 때 오류 발생

분류에서Dev

파생 클래스에서 전용 멤버에 액세스 할 수 없습니다 (생성자가 기본 클래스에 정의되어 있어도)

분류에서Dev

매개 변수에서 멤버 변수 초기화

분류에서Dev

Dart의 선택적 매개 변수 생성자에서 생성자로 멤버 초기화

분류에서Dev

Dart의 선택적 매개 변수 생성자에서 생성자로 멤버 초기화

분류에서Dev

C ++ 멤버 초기화에서 생성자에 새 개체 전달

분류에서Dev

c # 다른 클래스의 이벤트에 대한 매개 변수를 기본 클래스로 전달

분류에서Dev

Swift에서 초기화 매개 변수로 클로저 전달

분류에서Dev

기본 클래스의 인터페이스에 유형 매개 변수 전달

분류에서Dev

Python 클래스 멤버에 기본 인수 할당

분류에서Dev

구조의 기본 멤버 값 또는 기본 생성자 매개 변수?

분류에서Dev

Base 클래스 생성자 호출과 Child 클래스의 멤버 변수 초기화

분류에서Dev

Castle Windsor를 사용하여 서비스 클래스의 생성자에서 매개 변수화 된 생성자로 클래스 초기화

Related 관련 기사

  1. 1

    오버로드 된 메서드에 매개 변수로 전달할 때 기본 클래스와 파생 클래스를 구분합니다.

  2. 2

    클래스 멤버 함수 / 변수로 기본 매개 변수 초기화

  3. 3

    복사 생성자를 사용할 때 복사 생성자 전에 클래스 데이터 멤버가 초기화됩니까?

  4. 4

    자바 스크립트의 기본 클래스에 초기화 매개 변수를 전달하는 방법

  5. 5

    클래스 멤버 변수를 다른 클래스 멤버 변수에 초기화 / 할당

  6. 6

    (복사 생성자) 다른 개체를 초기화하기 위해 매개 변수로 전달 된 개체가 개인 멤버에 액세스 할 수있는 방법은 무엇입니까?

  7. 7

    하위 클래스 생성자에서 부모 클래스의 개인 멤버를 초기화하는 방법

  8. 8

    파생 클래스는 기본 클래스의 개인 멤버를 다른 기본 클래스의 개인 멤버로 오버로드 할 수 없습니다.

  9. 9

    초기화 목록을 사용할 때 생성자에 전달 된 매개 변수 확인-C ++

  10. 10

    합성 된 기본 생성자는 이미 초기화 된 클래스 멤버를 어떻게 초기화 할 수 있습니까?

  11. 11

    Swift에서 매개 변수로 전달 된 클래스를 기반으로 동적 초기화 달성

  12. 12

    Dart Flutter : 클래스 생성자에 기본값을 설정할 때 선택적 매개 변수의 기본값은 일정해야합니다.

  13. 13

    생성자에 개체를 설치할 때 C ++ 클래스 멤버 범위

  14. 14

    클래스 생성자에서 멤버를 초기화하는 약어

  15. 15

    C ++-파생 클래스에서 정적으로 기본 클래스 보호 멤버 변수 초기화

  16. 16

    클래스 생성자에서 초기화 된 ofstream 유형의 멤버 변수를 사용할 수 있습니까?

  17. 17

    파생 클래스 속성을 Angular의 기본 클래스 생성자에 전달할 때 오류 발생

  18. 18

    파생 클래스에서 전용 멤버에 액세스 할 수 없습니다 (생성자가 기본 클래스에 정의되어 있어도)

  19. 19

    매개 변수에서 멤버 변수 초기화

  20. 20

    Dart의 선택적 매개 변수 생성자에서 생성자로 멤버 초기화

  21. 21

    Dart의 선택적 매개 변수 생성자에서 생성자로 멤버 초기화

  22. 22

    C ++ 멤버 초기화에서 생성자에 새 개체 전달

  23. 23

    c # 다른 클래스의 이벤트에 대한 매개 변수를 기본 클래스로 전달

  24. 24

    Swift에서 초기화 매개 변수로 클로저 전달

  25. 25

    기본 클래스의 인터페이스에 유형 매개 변수 전달

  26. 26

    Python 클래스 멤버에 기본 인수 할당

  27. 27

    구조의 기본 멤버 값 또는 기본 생성자 매개 변수?

  28. 28

    Base 클래스 생성자 호출과 Child 클래스의 멤버 변수 초기화

  29. 29

    Castle Windsor를 사용하여 서비스 클래스의 생성자에서 매개 변수화 된 생성자로 클래스 초기화

뜨겁다태그

보관