他の投稿からコードを読んで、私はこのようなものを見ています。
struct Foo {
Foo() : mem(0) {}
int mem;
};
この場合、特に中括弧に関して、mem(0){}は何をしますか?私はこれまでこれを見たことがなく、これについて他にどこで見つけることができるかわかりません。mem(0)がmemを0に初期化することは知っていますが、なぜ{}なのですか?
ありがとう。
他の投稿からコードを読んで、私はこのようなものを見ています。
struct Foo {
Foo() : mem(0) {}
int mem;
};
この場合、特に中括弧に関して、mem(0){}は何をしますか?私はこれまでこれを見たことがなく、これについて他にどこで見つけることができるかわかりません。mem(0)がmemを0に初期化することは知っていますが、なぜ{}なのですか?
ありがとう。
はクラスのコンストラクターであるためFoo()
、メンバー変数mem
がクラスの外部で初期化されている場合でも、本体が必要です。
そのため、あなたの例では、コンストラクターの本体は空です。
Foo() : mem(0)
{
// 'mem' is already initialized, but a body is still required.
}
クラスのコンストラクターを定義します。コロンの後の部分は初期化リストでありmem
、コンストラクター呼び出しを使用してメンバーがゼロに初期化されます。
比較:
int a(0);
int b = 0;
これら2つは同じことをしますが、前者はオブジェクト構築がC++で通常どのように見えるかとより一致しています。
intc++メソッドの実装は.hファイルで定義できます
class MyClass
{
public:
MyClass(){
.....
}
void doSomething(){
.....
}
~MyClass(){
.....
}
};
通常、テンプレートの実装で使用されます。また、ライブラリのリンクを避けたい場合や、libファイルをプロジェクトにリンクせずにファイルを含めることができるようにすべてのコードをユーザーに提供したい場合は、このクラス宣言のメソッドを使用できます。