0

次の例では本当に混乱しています。

#include <iostream>
class C {
    public:
    int a,b;
};
int main() {
    C c{3,6};
    std::cout<<c.a<<'\n';
    std::cout<<c.b<<'\n';
    return 0;
}

それはうまく機能し、期待される結果をもたらします。しかし、上記のコードを以下のように変更すると。

#include <iostream>
class C {
    int a,b;
    public:
        int get_a(){
            return a;
        }
        int get_b(){
            return b;
        }
};
int main(){
    C c{3,6};
    std::cout<<c.get_a()<<'\n';
    std::cout<<c.get_b()<<'\n';
    return 0;
}

上記のプログラムでは、コンパイラで複数のエラーが表示されます。最初のプログラムでは均一な初期化が許可されているのに、2番目のプログラムでは許可されていないのはなぜですか? どこが間違っていますか?

4

5 に答える 5

1

最初のコードが機能したのは、データ メンバーabがパブリックであり、クラスの外部からアクセスできるからです。ただし、2 番目のコードでは、それらはプライベートとして宣言されているため、クラスの外部からアクセスすることはできません。それらをパブリックとして再度宣言するか、次のようにコンストラクターを使用します (まだプライベートとして使用する場合)。

 C(int x,int y)   // This is a parameterised constructor
    {
        a=x;
        b=y;
    }

そしてそれらを次のように初期化しますC c(3,6);

于 2015-05-01T15:01:50.497 に答える
1

a2番目の例にbあるprivateため、クラス外からはアクセスできません。

于 2015-05-01T14:58:52.803 に答える