C++のクラスの文法

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
prapra

C++のクラスの文法

#1

投稿記事 by prapra » 14年前

C++を大体理解できて、
DirectX9と物理エンジンBulletでゲームを作ろうと
解説されているサイトを何個か見ていると
サンプルプログラムに意味不明なクラスの文法が2つあったので
質問させてもらいます。

◎1つは

コード:

クラスA<クラスB> aa ;
クラスの横にクラスがありますなんでしょう?

◎もう1つは

コード:

class aa{
public:
   int bb ;
   int cc ;
   aa() ;
   ~aa() ;
}
 
aa::aa()
 ,bb(123)
 ,cc(321)
{
}
コンストラクタでメンバ変数を初期化しているようなんですが
すつうに

コード:

aa::aa(){
 bb = 123 ;
 cc = 321 ;
}
とすれば良いと思うんですがなんの意味があるんでしょうか?

上記のことが検索したりしてもなかなか出ません
知っている方回答お願いします。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: C++のクラスの文法

#2

投稿記事 by beatle » 14年前

1つめはテンプレートという機能です
参考: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++のクラスの文法

#3

投稿記事 by Blue » 14年前

1つめはテンプレートクラスですね。
Web検索すれば、1から説明してくれるサイトがあるのでここで教えてもらうよりわかりやすいかも。


2つめはメンバイニシャライザについてですね。

コード:

aa::aa(){
 bb = 123 ;
 cc = 321 ;
}
は、 { の前に 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;
}
それと、constメンバ変数に対して、代入はできないので、メンバイニシャライザ(初期化リスト)で値を設定する
ことになります。

コード:

class A {
public:
	const int n;
	A() : n(100) {}
};

class B {
public:
	const int n;
	B() { n = 100; } // これは記述できない!
};

prapra

Re: C++のクラスの文法

#4

投稿記事 by prapra » 14年前

◎beatleさん
コンストラクタ本体で初期化するよりも大抵良い事です。
そうですか、今日からつかっていきます。
参考サイトもありがとうございます。
C++の5%くらいの部分しか理解していないのだと思います。
そうですか、C++はけっこう機能が追加されているんですねぇ

◎Blueさん
constメンバ変数に対して、代入はできないので、メンバイニシャライザ(初期化リスト)で値を設定する
ことになります。
そういえば確かにコンパイルエラーがおこります。
こうすればいいんですね。
メンバイニシャライザって言うんですか。

回答ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る