独習ゲーム制作
C++ part2
最終更新:
Bot(ページ名リンク)
-
view
C++の概要
目次
CとC++の違い
- C++は関数を引数なしでプロトタイプする際に、voidを記述しなくていい。
- 例
-
/* C言語の場合 */
int main(void)
/* C++の場合 */
int main() - Cでは任意だったプロトタイプ宣言をC++では必ず記述しなければならない。
-
/* sum関数がmain関数の後に宣言されているので
プロトタイプ宣言をしないといけない。 */
int sum(int b); ←プロトタイプ宣言
int main(){
int a;
a=sum(10);
…
}
sum(int b){
…
} - C++ではvoid以外の戻り値型を持つ関数は必ずreturn文がないといけない。
-
int sum(int b){
int a;
…
return a;
}
int main(){
…
c=sum(10);
return 0;
} - C++ではローカル変数を先頭以外のどこで宣言してもいい。
-
int main(){
int a=10;
cout << a;
char word='c';
cout << word;
return 0;
} - C++ではブール値(真/偽)を保存するboolデータ型が定義されている。
-
int main(){
bool shingi;
shingi = false;
if(shingi) cout << "真";
else cout << "偽";
return 0;
}
/* 出力は「偽」になる */
関数のオーバーロード
関数を多重定義することを関数のオーバーロードといいます。これもC++の重要な機能です。
オーバーロードするために必要な条件は、
オーバーロードするために必要な条件は、
- 仮引数のデータ型が異なる
- 仮引数の個数が異なる
です。
…
void f1(int a);
void f1(int a, int b);
void f1(double a);
void f1(int a);
void f1(int a, int b);
void f1(double a);
int main(){
/* void f1(int a)が呼び出されます */
f1(10);
/* void f1(int a, int b)が呼び出されます */
f1(10,20);
/* void f1(double a)が呼び出されます */
f1(10.01);
/* void f1(int a)が呼び出されます */
f1(10);
/* void f1(int a, int b)が呼び出されます */
f1(10,20);
/* void f1(double a)が呼び出されます */
f1(10.01);
return 0;
}
}
練習問題3
引数として受け取った2つの数値のうち、小さい方返すmin()という名前の関数を作成しなさい。min()関数をオーバーロードし、それぞれ文字、整数、倍精度浮動小数点数を引数として受け取るようにしなさい。
クラスの概要
コンストラクタ関数とデストラクタ関数
C++ではクラスのメンバ変数を初期化するためにコンストラクタ関数を用います。コンストラクタ関数はそのクラスのオブジェクトが作成されるたびに自動的に初期化を行ってくれます。コンストラクタ関数は戻り値型なしにクラスと同じ名前で宣言します。
コンストラクタ関数とは逆にオブジェクトが破棄される際に呼び出され、メモリーの解放などを行うのがデストラクタ関数です。デストラクタ関数はコンストラクタ関数とほとんど同じで、先頭にチルダ(~)をつけて宣言します。
コンストラクタ関数とは逆にオブジェクトが破棄される際に呼び出され、メモリーの解放などを行うのがデストラクタ関数です。デストラクタ関数はコンストラクタ関数とほとんど同じで、先頭にチルダ(~)をつけて宣言します。
class myclass{
int a;
public:
myclass();
~myclass();
void f1();
};
int a;
public:
myclass();
~myclass();
void f1();
};
myclass::myclass(){
a = 10;
}
myclass::~myclass(){
…
}
a = 10;
}
myclass::~myclass(){
…
}
練習問題4
経過時間を測定するストップウォッチをまねて、stopwatchという名前のクラスを作成しなさい。コンストラクタを使って初期の経過時間を0に設定します。start()とstop()という2つのメンバ関数を作成し、タイマーをそれぞれオンまたはオフに設定します。また、show()というメンバ関数を作成し、経過時間を表示します。さらに、デストラクタ関数を作成して、stopwatchオブジェクトを破棄する際に経過時間を自動的に表示させます(単純にするために、時間を秒数で表示します)。