構造体に関する理解が浅かったですね。
実は最近、時間のあるときにC++の勉強もしています。
と言っても、入門用のサイトを読む程度で、実際にC++でプログラムを書いたりしているわけではないんですが。
まあ、やはりオブジェクト指向とかの知識を欲すると、C言語の拡張版であるC++に興味が行くわけです。
で、その中で、C++の中核をなす機能であるクラスについて読んでいて、自分の構造体に関する理解の浅さに気付きました。
C++におけるクラスとは、C言語における構造体の機能を拡張する事でオブジェクト指向プログラミングを可能にすると言う考え方で、これを勉強すると副産物として『Cの構造体とは何か』をより深く知る事が出来るなあと感じました。
中級以上の人達には何を今さらな話なんでしょうけども。
構造体とは、扱うオブジェクトに必要な様々な型の変数をまとめて一つの変数のように使う(宣言する)機能なんだなと。
typedef struct {
メンバ変数;
} 型名;
型名 変数名;
とやって構造体を使っていたのですが、最後の行の意味がわかっていませんでした。
最後の行は言わば、
int x;
ってやってるのと同じ事なんですね。
つまり、変数を宣言するように構造体に名前をつけて宣言しているわけです。
その有効範囲は変数と同じように宣言されたスコープ内になるのでしょう。
僕は宣言まで含めて一括りで覚えたために、構造体は同じようなメンバ内容でもオブジェクトごとに作り、全てグローバルで宣言していました。
理解が深まると自分が公開していたソースの拙さが恥ずかしくなります・・・。
まあ、そうなる事は最初からわかっていて、その過程も隠さず見せる方が同じような初心者の人にはわかりやすいと思ったからやっているわけですけども。
具体的に言うと、現状で僕のソースは自機、敵機、敵弾、自機の波動砲、フォースと、画面上に表示するオブジェクトに関して、必要なデータは似通っているにも関わらず、個別に構造体を作っています。
座標(x、y)や、ベクトル(x、y)など、そのメンバ変数はかぶりまくっています。
おそらくこれらは、一番メンバ変数の多い敵機の構造体をキャラクターデータ型として統合し、皆で共有する方がソースは単純になるはずです。
typedef struct {
メンバ変数(座標とかベクトルとか);
~内容は敵機の構造体~
} charadata;
charadata Jiki, JikiShot, Teki, TekiShot, Force;
これで、いけると思います。
「ばかだなあ、俺・・・」と思うと同時に、勉強の成果なんで嬉しくも感じます。
今回、何が言いたいかというと、「気が向いたらC++もやっとけ」と。
他の言語でもいいんでしょうけど、とにかく自分の使っている言語以外の勉強をする事で、メインで使っている言語の理解がより深まる事ってあるんだなあと思ったわけです。
今回、C++でクラスの概念を知った事がC言語における構造体の理解を深めた様に、他のオブジェクト指向型言語を軽く勉強する音でC++におけるクラスやオブジェクト指向に関する理解を深められるんだろうなと容易に想像できます。
趣味でプログラミングをやっている人なんて、レベルの違いがあっても、おおよそ利害関係を度外視して勉強好きな方が多いとは思いますが、ホント、こういうことがあるから勉強って面白いですよね。
実は最近、時間のあるときにC++の勉強もしています。
と言っても、入門用のサイトを読む程度で、実際にC++でプログラムを書いたりしているわけではないんですが。
まあ、やはりオブジェクト指向とかの知識を欲すると、C言語の拡張版であるC++に興味が行くわけです。
で、その中で、C++の中核をなす機能であるクラスについて読んでいて、自分の構造体に関する理解の浅さに気付きました。
C++におけるクラスとは、C言語における構造体の機能を拡張する事でオブジェクト指向プログラミングを可能にすると言う考え方で、これを勉強すると副産物として『Cの構造体とは何か』をより深く知る事が出来るなあと感じました。
中級以上の人達には何を今さらな話なんでしょうけども。
構造体とは、扱うオブジェクトに必要な様々な型の変数をまとめて一つの変数のように使う(宣言する)機能なんだなと。
typedef struct {
メンバ変数;
} 型名;
型名 変数名;
とやって構造体を使っていたのですが、最後の行の意味がわかっていませんでした。
最後の行は言わば、
int x;
ってやってるのと同じ事なんですね。
つまり、変数を宣言するように構造体に名前をつけて宣言しているわけです。
その有効範囲は変数と同じように宣言されたスコープ内になるのでしょう。
僕は宣言まで含めて一括りで覚えたために、構造体は同じようなメンバ内容でもオブジェクトごとに作り、全てグローバルで宣言していました。
理解が深まると自分が公開していたソースの拙さが恥ずかしくなります・・・。
まあ、そうなる事は最初からわかっていて、その過程も隠さず見せる方が同じような初心者の人にはわかりやすいと思ったからやっているわけですけども。
具体的に言うと、現状で僕のソースは自機、敵機、敵弾、自機の波動砲、フォースと、画面上に表示するオブジェクトに関して、必要なデータは似通っているにも関わらず、個別に構造体を作っています。
座標(x、y)や、ベクトル(x、y)など、そのメンバ変数はかぶりまくっています。
おそらくこれらは、一番メンバ変数の多い敵機の構造体をキャラクターデータ型として統合し、皆で共有する方がソースは単純になるはずです。
typedef struct {
メンバ変数(座標とかベクトルとか);
~内容は敵機の構造体~
} charadata;
charadata Jiki, JikiShot, Teki, TekiShot, Force;
これで、いけると思います。
「ばかだなあ、俺・・・」と思うと同時に、勉強の成果なんで嬉しくも感じます。
今回、何が言いたいかというと、「気が向いたらC++もやっとけ」と。
他の言語でもいいんでしょうけど、とにかく自分の使っている言語以外の勉強をする事で、メインで使っている言語の理解がより深まる事ってあるんだなあと思ったわけです。
今回、C++でクラスの概念を知った事がC言語における構造体の理解を深めた様に、他のオブジェクト指向型言語を軽く勉強する音でC++におけるクラスやオブジェクト指向に関する理解を深められるんだろうなと容易に想像できます。
趣味でプログラミングをやっている人なんて、レベルの違いがあっても、おおよそ利害関係を度外視して勉強好きな方が多いとは思いますが、ホント、こういうことがあるから勉強って面白いですよね。
PR
この記事にコメントする
- ABOUT
やってやれないことはないっ!たぶん・・・
- カレンダー
06 | 2025/07 | 08 |
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- 最新コメント
[11/09 CALL MY NAME]
[11/09 erin]
[08/18 うずランド]
[07/11 うずランド]
[06/23 うずランド]
- プロフィール
HN:
Call my name
年齢:
51
性別:
男性
誕生日:
1974/05/22
職業:
スロ屋店員
趣味:
いろいろ
自己紹介:
やる気だけはあるつもりです。
はい。
はい。
- ブログ内検索
- カウンター
- アクセス解析