2016-07-08 15 views
1

C++のstructとclassは非常によく似ていて、構造体のメンバーはデフォルトでパブリックアクセスを持ち、クラスメンバーはプライベートアクセスなどをしています。しかしクラスインスタンスを中括弧で初期化する

、構造体のインスタンスは次のように初期化することができるので:

struct MyStruct{ 
    int a; 
    int b; 
    int c; 
}; 

MyStruct s1 = {1, 2, 3}; //a=1, b=2, c=3 
MyStruct s2 = {}; //a=0, b=0, c=0 

それはC++のクラスのための同じをしても安全ですか?

class MyClass{ 
    int a; 
    int b; 
    int c; 
}; 

MyClass c1 = {1, 2, 3}; //a=1, b=2, c=3 
MyClass c2 = {}; //a=0, b=0, c=0 

質問:たとえば、私たちはコンストラクタ(複数可)を使用することができます承知しています、私は、構造体のインスタンスのようなクラスのインスタンスを初期化した場合、私は知っておくべきすべての落とし穴はありますか?この方法を使用してデータメンバーをデフォルト値(たとえばintの場合は0、ポインタの場合はnull)に初期化すると安全ですか?

+3

C++では、デフォルトのアクセス指定子を除き、クラスと構造体に違いはありません。 – NathanOliver

+0

@ NathanOliverしたがって、中括弧を使用してクラスインスタンスを初期化するのが安全だと思いますか? – user3437460

答えて

5

structclassの唯一の違いは、デフォルトのアクセス仕様です:MyClassは3人のprivateの会員を有しておりMyStructは3 publicなものがあります。その結果、MyClassは、このコードが病気に形成されますない集計(要件の一つはクラスが何のプライベートまたは保護された非静的データメンバを持っていないということです)、次のとおりです。

MyClass c1 = {1, 2, 3}; // error 

しかし、そこにありますMyStructの初期設定と、MyClassの初期設定との間には、メンバーをすべてpublicとしていた場合との違いはありません。

+0

ああ良い点。私はそのOPで 'public:'を使わなかったのを忘れてしまった。 – NathanOliver

+0

@Barryご返信ありがとうございます。ですから、MyClassのすべてのデータメンバーが公開されていれば、 '= {1,2,3};'で初期化するだけで、心配する必要はありません。 – user3437460

+0

@ user3437460はい、回答に記載されているとおり、違いはありません。 – Barry

関連する問題