0

A と B の 2 つのクラスがあるとします。A には整数があり、コンストラクターからコンソールに表示されます。また、B のメンバ オブジェクトも持ちます。B は A と同じように整数を表示しますが、A が作成するときに A から整数を取得します。整数は const 値であるため、B のコンストラクターに直接渡す必要があります。

したがって、A が独自の整数を B に渡すと、A と B の両方がコンソールに同じ数値を表示すると予想されます (1)。代わりに、B のコンストラクターがその整数を出力すると、-858993460 が表示されます。何故ですか? A が B オブジェクトをインスタンス化し、B の const int に整数を渡すと、整数の値が変わるのはなぜですか?

main.cpp

#include "A.h"

int main() {
A a;
std::cin.get();
return 0;
}

ああ

#pragma once
#include <iostream>
#include "B.h"

class A {
public:
A() :
    b(NUM_A) 
{ std::cout << "A's number: " << NUM_A << std::endl; }

private:
B b;
const int NUM_A = 1;
};

Bh

#pragma once
#include <iostream>

class B {
public:
B (int num) : 
    NUM_B(num) 
{ std::cout << "B's int: " << NUM_B << std::endl; }

const int NUM_B;
};
4

2 に答える 2

0

の定義ではA、 memberが member のb前に来NUM_Aます。その結果、 のb前に初期化されNUM_Aます。Bのコンストラクタに渡す値は、初期化されていない値です。

のメンバーの順序を変更しAます。それ以外の

B b;
const int NUM_A = 1;

使用する

const int NUM_A = 1;
B b;
于 2016-03-04T15:59:47.517 に答える
0

コードの問題は、 のb前に初期化されることNUM_Aです。

class A {
public:
    const int NUM_A = 1;

    A() :
        b(NUM_A)
    {
        std::cout << "A's number: " << NUM_A << std::endl;
    }

private:
    const int NUM_A = 1;
    B b;    

    //B b;    
    //const int NUM_A = 1;
};
于 2016-03-04T15:58:59.683 に答える