C++関数
C++の関数仕様について
main関数の戻り値について
C++ではmain関数の戻り値はint型を返す必要があります。
戻り値を省略することやvoid型を指定することはできず、コンパイル時に以下のようなエラーが出力されます。
error: ‘::main’ must return ‘int’
In function ‘int main()’:
error: return-statement with no value, in function returning ‘int#
仮引数について
C++では、関数の仮引数を省略した場合にはvoidが指定されたと判断されます。
C言語では仮引数の省略は未定義状態と判断されていましたが、C++では明確に「引数がない」と判断されます。
#include <iostream>
void function()
{
printf("function is called.\n");
}
int main()
{
function();
return(0);
}
コマンドライン引数(command line argument)について
C++のコマンドライン引数は、以下の形式で指定します。
C言語と同様に、argvは引数文字列データへのポインタ配列です。
#include <iostream>
int main(int argc, char *argv[])
{
if(argc < 2){
printf("ERROR: Invalid argument.\n");
return(-1);
}
for(int i = 0; i <= argc - 1; i++){
printf("argv[%d]: %s\n", i, argv[i]);
}
return(0);
}
デフォルト引数について
C++では、関数呼び出し時に引数が指定されなかった場合に、デフォルトで使用する引数を指定することができます。
デフォルト引数を用いることで、関数呼び出し時に引数を省略して呼び出すことができます。
#include <iostream>
void function(int x = 80, int y = 50, int z = 30)
{
printf("%d:%d:%d\n", x, y, z);
}
int main(void)
{
function(); // デフォルト引数を利用する
function(10); // 第一引数のみ指定する
function(10,20); // 第一引数と第二引数のみ指定する
function(10,20,30); // デフォルト引数を利用しない
return(0);
}
デフォルト引数の設定は末尾の引数から与える必要があります。
先頭の引数のみデフォルトを指定することはできません。
void function(int x, int y = 50, int z = 30) // OK
void function(int x, int y, int z = 30) // OK
void function(int x = 80, int y = 50, int z) // エラー
void function(int x = 80, int y, int z) // エラー
関数の多重定義(オーバーロード)
C++では、引数が異なる同名の関数を複数定義することができます。
「引数の型」と「引数の個数」に応じて適合する関数が呼び出されます。
#include <iostream>
int add(int x, int y){ return(x + y); }
int add(int x, int y, int z){ return(x + y + z); }
double add(double x, double y){ return(x + y); }
int main(void)
{
printf("%d\n", add(1,2));
printf("%f\n", add(1.5,2.7));
printf("%d\n", add(10,20,30));
return(0);
}
inline関数
インライン関数は、呼び出された箇所に関数本体を埋め込む関数です。
C言語におけるマクロ(#define)定義と同等の機能です。
インライン関数として定義された関数は、その関数が呼び出されたところで展開されます。
呼出しごとに展開されるので実行コードは少し大きくなりますが、マクロと同様に関数呼び出しのオーバーヘッドが回避できます。
#include <iostream>
// 比較して大きい値を返す。
inline int maxof(int a, int b)
{
return((a > b) ? a : b);
}
int main(void)
{
printf("%d\n", maxof(32,64));
return(0);
}
関連ページ
- C++のファイル作成と実行
- 関数
- 名前空間
- 参照型
- 動的メモリ割り当て
- キャスト
- 例外処理
- クラス
- コンストラクタとデストラクタ
- 継承
- ポリモーフィズム
- テンプレート
- STL
- 文字列操作
- 演算子のオーバーロード