C++ での利点の一つとして、構造体をオブジェクトとして扱い、オブジェクトに対して行う関数を楽に扱えることです。
たとえば、
#include <stdio.h>
typedef struct StructData {
int intData;
float floatData;
} StructData;
void StructDataInit( StructData* data, int intData, float floatData ){
data->intData = intData;
data->floatData = floatData;
}
void SetStructDataInt( StructData* data, int intData ){
data->intData = intData;
}
void SetStructDataFloat( StructData* data, float floatData ){
data->floatData = floatData;
}
int GetStructDataInt( StructData* data ){
return data->intData;
}
float GetStructDataFloat( StructData* data ){
return data->floatData;
}
int main( void ){
StructData data;
StructDataInit(&data,12,3.45f);
printf("int:%d\nfloat:%f\n",GetStructDataInt(&data),GetStructDataFloat(&data));
SetStructDataInt(&data,67);
SetStructDataFloat(&data,8.90f);
printf("int:%d\nfloat:%f\n",GetStructDataInt(&data),GetStructDataFloat(&data));
return 0;
}
これと同じことを C++ にすると、
#include <stdio.h>
class StructData {
int intData;
float floatData;
public:
StructData( int intData, float floatData ){
this->intData = intData;
this->floatData = floatData;
}
void Set( int intData ){this->intData = intData;}
void Set( float floatData ){this->floatData = floatData;}
int GetInt( void )const{return this->intData;}
float GetFloat( void )const{return this->floatData;}
};
int main( void ){
StructData data(12,3.45f);
printf("int:%d\nfloat:%f\n",data.GetInt(),data.GetFloat());
data.Set(67);
data.Set(8.90f);
printf("int:%d\nfloat:%f\n",data.GetInt(),data.GetFloat());
return 0;
}
このようになります。
(標準出力の部分も C++ にすべきだとは思いますが、そこはそのままにしておきました)
StructData に対して行う関数群を、メンバ関数として持つことができ、グローバル関数の数を減らしたり、
継承(元となるクラスの機能や変数を受け継ぐこと)によって機能などの拡張を容易にすることができます。
STGに例えると、ゲーム中、現在位置などを持つ基本クラスがあり、
それに位置情報等の変数、それらを扱う関数が定義されているとします。
この基本クラスを継承した自機クラス、敵クラス、弾クラスなどを定義します。
このとき、基本クラスの持つメンバ変数・メンバ関数は継承された各クラスでも使用することができます。
つまり、いちいち同じ処理を書かずにすみます。
他にも説明すべき点(public:とか)がありますが、 C++ のさわりということで。
VC++は特に(オプションでCソースとしてコンパイルする設定をしていない限り)変更せずに
C++ コードをコンパイルすることができるはずです。
あと、 C++ がライブラリに適している、というのは、
クラス単位で機能を提供できる点と、
C と比べると、比較的書くコード量が少なくて済む、
というのが理由ではないでしょうか。
(継承して拡張できるというのもありますね)
DXライブラリを C++ 化できれば、そのライブラリを使うソースコードが結構すっきりすると思いますよ。
どちらかといえば C ライブラリをカプセル化した C++ ライブラリを作るほうが楽ですが。
私はここに書くほど C++ をバリバリ使っているわけでは無いので、
詳しい利点やオススメの本の紹介などは他の方々に任せます…。