C++を大体理解できて、
DirectX9と物理エンジンBulletでゲームを作ろうと
解説されているサイトを何個か見ていると
サンプルプログラムに意味不明なクラスの文法が2つあったので
質問させてもらいます。
◎1つは
クラスの横にクラスがありますなんでしょう?
◎もう1つは
コンストラクタでメンバ変数を初期化しているようなんですが
すつうに
とすれば良いと思うんですがなんの意味があるんでしょうか?
上記のことが検索したりしてもなかなか出ません
知っている方回答お願いします。
C++のクラスの文法
Re: C++のクラスの文法
1つめはテンプレートという機能です
参考:http://www.geocities.jp/ky_webid/cpp/language/027.html
2つめ
コンストラクタの初期化子リストで初期化することは、コンストラクタ本体で初期化するよりも大抵良い事です。
初期化子リストで初期化しない場合、その変数がユーザー定義型ならデフォルトコンストラクタで初期化されますが、直後にコンストラクタ本体で本来の初期値が「代入」されるため、デフォルトコンストラクタによる初期化は無駄になります。
参考:"Effective C++ 第3版"、スコット・メイヤーズ著、小林健一郎訳 「4項 オブジェクトは、使う前に初期化しよう」
僕も長い間C++を触ってますが、恐らくprapraさんがいう「C++を大体理解できて」は、C++の5%くらいの部分しか理解していないのだと思います。僕も20%ぐらいしか理解していないんじゃないだろうかと最近怖くなっています(笑)
参考:http://www.geocities.jp/ky_webid/cpp/language/027.html
2つめ
コンストラクタの初期化子リストで初期化することは、コンストラクタ本体で初期化するよりも大抵良い事です。
初期化子リストで初期化しない場合、その変数がユーザー定義型ならデフォルトコンストラクタで初期化されますが、直後にコンストラクタ本体で本来の初期値が「代入」されるため、デフォルトコンストラクタによる初期化は無駄になります。
参考:"Effective C++ 第3版"、スコット・メイヤーズ著、小林健一郎訳 「4項 オブジェクトは、使う前に初期化しよう」
僕も長い間C++を触ってますが、恐らくprapraさんがいう「C++を大体理解できて」は、C++の5%くらいの部分しか理解していないのだと思います。僕も20%ぐらいしか理解していないんじゃないだろうかと最近怖くなっています(笑)
最後に編集したユーザー beatle on 2012年3月14日(水) 17:24 [ 編集 1 回目 ]
-
Blue
Re: C++のクラスの文法
1つめはテンプレートクラスですね。
Web検索すれば、1から説明してくれるサイトがあるのでここで教えてもらうよりわかりやすいかも。
2つめはメンバイニシャライザについてですね。 は、 { の前に bbとccのコンストラクタが走ります。
こんなコードを書くとわかります。
それと、constメンバ変数に対して、代入はできないので、メンバイニシャライザ(初期化リスト)で値を設定する
ことになります。
Web検索すれば、1から説明してくれるサイトがあるのでここで教えてもらうよりわかりやすいかも。
2つめはメンバイニシャライザについてですね。 は、 { の前に bbとccのコンストラクタが走ります。
こんなコードを書くとわかります。
#include <iostream>
class A {
public:
A() { std::cout << "A Constracter" << std::endl; }
};
class B {
public:
A a;
B() { std::cout << "B Constracter" << std::endl; }
};
int main()
{
B b;
return 0;
}
ことになります。
-
prapra
Re: C++のクラスの文法
◎beatleさん
参考サイトもありがとうございます。
◎Blueさん
こうすればいいんですね。
メンバイニシャライザって言うんですか。
回答ありがとうございました。
そうですか、今日からつかっていきます。コンストラクタ本体で初期化するよりも大抵良い事です。
参考サイトもありがとうございます。
そうですか、C++はけっこう機能が追加されているんですねぇC++の5%くらいの部分しか理解していないのだと思います。
◎Blueさん
そういえば確かにコンパイルエラーがおこります。constメンバ変数に対して、代入はできないので、メンバイニシャライザ(初期化リスト)で値を設定する
ことになります。
こうすればいいんですね。
メンバイニシャライザって言うんですか。
回答ありがとうございました。