タグ

コンストラクタに関するyowanoのブックマーク (4)

  • 引数1個のコンストラクタの暗黙呼び出しとexplicit

    #include <iostream> using namespace std; class C { protected: int x; public: C(int arg) : x(arg) { cout << "C::C(int)" << endl; } C& operator=(int arg) { cout << "C::operator=(int)" << endl; x = arg; return *this; } }; int main(void) { C obj = 10; return 0; } 引数をひとつだけとるコンストラクタのことを,“変換コンストラクタ(converting constructor)”と呼ぶ. 引数をひとつだけとるコンストラクタについては,明示的呼び出しと暗黙的呼び出しの2つの呼び出し方がある. たとえば,クラスCに1個の引数をとるコンストラクタC

    yowano
    yowano 2013/09/26
    Cがクラスだとした場合、C obj = 10; とした時に呼び出される、引数が一つのコンストラクタを、変換コンストラクタと呼ぶ。C obj = 10; は、C obj(10); と同様の意味を持つ。
  • 20章 constメンバ変数の初期化 - (void*)Pないと

    http://www.geocities.jp/ky_webid/cpp/language/020.html C++のconstには状況よって様々な効果があるので少しややこしいです。 とりあえずひとつずつ理解していきたいと思います。 まずはC言語的なconstについてですが、これは単にその変数、もしくはその変数が参照している値を変更不可にすることができます。 const int i = 100; // iの値を変更できない int* const p; // pの値を変更できない const int* p; // pが指している値を変更できない const int* const p; // pの値を変更できなくて且つ指してる値も変更できない C++ではこれ以外にconstの役割がかなり増えました。 ひとつずついきましょう。 まずはメンバイニシャライザについてです。 メンバ変数にconstを適

    20章 constメンバ変数の初期化 - (void*)Pないと
  • 『コンストラクタで書かれるコロン「:」って何?』

    C++ フリーでぷろぐらみんぐ 逆引きリファレンス。 C++のやりたい事から引ける逆引きメモを書いています。 何かコメントなどいただけると嬉しいです! クラスのコンストラクタのコードを書くときに、コロン「:」が良く使われます。 これって何でしょう? 最初の頃、これが良く分からなくて調べてみると、 メンバー変数や親クラスを初期化するものだと分かりました。 <コンストラクタ1> XXClass() : m_str("###") {}; こんな具合に記述されると、m_strがstringならば以下のコードが呼ばれたのと同じことです。 string m_str("####"); それだと、コンストラクタで次のように書くのと同じだと思いません? <コンストラクタ2> XXClass() { m_str = "###"; }; 私もかつてそう思ってました。 コロンは見づらいので、{}の中で記述するほう

    『コンストラクタで書かれるコロン「:」って何?』
    yowano
    yowano 2013/04/16
    メンバー変数や親クラスを初期化するもの。コロンは見づらいので、{}の中で記述するほうがいい! とも考えられるが、コロンを使用した方が一割程度処理が早くなる。見栄えはよくないかもしれないが慣れれば大丈夫
  • コンストラクタからメソッドを呼んではいけない? - OKWAVE

    Javaの鉄則」というを読み返したら、一つ該当しそうなものが載ってました。(このに載っている最後の鉄則です) 継承を使った場合のオブジェクトの初期化に起因する副作用のようです。 正直「こんなの見たことねーよ!」と思いましたが(の中でも「この種のエラーは一般的ではないかもしれない」と書いてありました)、もし起こったら原因が分からず悩むでしょう。 上手く説明できる気がしないので、を紹介するにとどめます。結構実践的に鉄則を学べるので良いだと思います。 コンストラクタから呼ぶのはほとんどがアクセサメソッドでしたが、ちょっと複雑なものを呼ぶときは気をつけないといかんなと思いました。

    コンストラクタからメソッドを呼んではいけない? - OKWAVE
    yowano
    yowano 2013/03/06
    ちゃんと設計してあれば特に問題は起きないが、バグの元になる(特に集団開発では)ので出来る限りやめる。コンストラクタ内は、まだオブジェクトの状態が完全ではない(フィールドが初期化されていない等)ため。
  • 1