• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C++のクラスポインタの初期化?)

C++のクラスポインタの初期化?

このQ&Aのポイント
  • C++のクラスポインタの初期化方法について質問です。
  • 具体的には、Irrlichtでゲームを制作している際の初期化方法に関しての疑問です。
  • 初歩的な質問ですが、アドレスを入れずにクラスポインタを関数で初期化する理由や、if文でのアドレス値の式の判別について教えていただきたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

若干語弊があるのですが。 C++のクラス、というのは、Cの構造体を拡張したものと考えてください。 > (1) *devide = createDevice( ...); createDeviceの宣言を見てないのですが、IrrlichtDevice へのポインタを返す関数になってませんか? Cでも struct A * foo(~) とかいう風に構造体(struct A)へのポインタを返す関数ってありますよね? > (2) if(!device) ポインタは NULL なら 「偽」、そうでないなら「真」です。 !は論理値の真偽を反転させます。 これはCでもよく使われる記法です。 例) FILE *fp = fopen(~); if (!fp){ /* → fp == NULL と同義 */ エラー; } > device だけならアドレスで、*device だとさしているオブジェクトそのものをあらわすと入門書には書いてある それは「IrrlichtDevice クラスへのポインタ」と宣言されているからです。 宣言(+初期化)と、それ以外での使い方が違うのはCも同じです。 struct A * a; は struct Aへのポインタ aの宣言 それ以降のプログラム中では a は struct Aへのポインタ *a は aの実体(=strcut Aそのもの) struct A b; では struct Aの変数 bの宣言 それ以降のプログラム中では b は struct A型の実体 *b は bがポインタでは無いのでエラー もし、Cの構造体やポインタについての理解が不十分なら、一度復習することをお勧めします。

noname#143092
質問者

お礼

>createDeviceの宣言を見てないのですが、IrrlichtDevice へのポインタを返す関数になってませんか? なぞが解けました。ありがとうございます。戻り値がアドレスということでしょうか。 >ポインタは NULL なら 「偽」、そうでないなら「真」です。 !は論理値の真偽を反転させます。 これはCでもよく使われる記法です。 なんだかあほ丸出しで自分が恥ずかしい・・・とても勉強になりました。

その他の回答 (3)

回答No.4

> device だけならアドレスで、*device だとさしているオブジェクトそのものをあらわすと入門書には書いてあるのですが、(1)はアドレスを代入しているのでしょうか IrrlichtDevice *device; だろが IrrlichtDevice* device; だろが deviceの型は IrrlichtDevice* ですよ?

noname#143092
質問者

お礼

回答ありがとうございます。もういちどポインタを復習しようと思います。

  • koko_u_u
  • ベストアンサー率18% (216/1139)
回答No.2

> なぜクラスポインタが関数で初期化できるのですか。 関数の戻り値で初期化されているんですね。 > これだとアドレス値の式を判別しているように思いますが きっとリソースの確保に失敗などすると、0 が返ってくる仕様なんでしょうね。 リファレンスマニュアルなどを確認しながらチュートリアルを読みましょう。

noname#143092
質問者

お礼

回答ありがとうございます。 >きっとリソースの確保に失敗などすると、0 が返ってくる仕様なんでしょうね。 やっと意味がわかりました。そういうことだったのか~ >リファレンスマニュアルなどを確認しながらチュートリアルを読みましょう。 はい、もう一度しっかり読み直して見ます。

回答No.1

IrrlichtDevice *device; device = createDevice( video::EDT_SOFTWARE, ... だったら納得できます? 両者は同じですよ?

noname#143092
質問者

補足

device だけならアドレスで、*device だとさしているオブジェクトそのものをあらわすと入門書には書いてあるのですが、(1)はアドレスを代入しているのでしょうか

関連するQ&A