引数の数が異なっていれば同じ関数名の自作関数の定義を複数行うことができます。そのことを自作関数のオーバーロードといいます。

ソーラー「では続いては


戻り値の型は同じで


引数の数の異なる同じ関数名の自作関数を作製してみよう(´▽`*)/


関数名はfunctionとします。


自作関数functionの定義はどぉしよっかな~~~」


マックス「なら


1つ目の自作関数functionの定義は


void function(int a) {

cout << a << "\n";

return;

}


2つ目の自作関数functionの定義は


void function(int a, int b) {

cout << a + b << "\n";

return;

}


としてみる。


この2つの自作関数functionの定義でどうだ!」


ソーラー「さりげなく


どちらの自作関数functionの定義にも


引数の部分に


int aが


もちいられています。


この2つの自作関数functionを


main関数の前で記述して


プログラムをビルド実行したなら


         "aが2回定義されています"



ビルドエラーが表示されそうなものですが・・・

(実際はそうはなりません)


果敢ですね」


マックス「ふっ」


にこやかにほほ笑むマックス。


マックス「もちろん 狙ってやったのさ 俺は突っ込み役だからなぁ


はぁ~はっはっはっはっはぁ~~~~~~~~~~


たのんだぞ  てんCよ。」


てんC「


それでは


1つ目の自作関数functionの定義は


void function(int a) {

cout << a << "\n";

return;

}


2つ目の自作関数functionの定義は


void function(int a, int b) {

cout << a + b << "\n";

return;

}


とし


自作関数functionを実行してみます。


main関数内での


自作関数functionの実行方法は


自作関数functionの定義に用いれた引数の数に応じて


引数が1つのタイプなら


function(1);


引数が2つのタイプなら


function(1,2);


のように


2つの実行方法が考えられます。


function(1);

function(1,2);


どちらの実行方法を試してみられますか?」


マックス「😊てんCよ😊 両方だ」


ソーラー「その意気だ! てんC たのむよ~(´▽`*)」


てんC「はい、マックスさん、ソーラーさん


それでは



1つ目の自作関数functionの定義は


void function(int a) {

cout << a << "\n";

return;

}

とし


2つ目の自作関数functionの定義は


void function(int a, int b) {

cout << a + b << "\n";

return;

}


として


main関数内で


function(1);

function(1,2);


を実行してみたいと思います。



🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞


この場合


変数宣言


int a


が2回行われることになるので


ビルドエラーが表示されるのでしょうか?


皆さんはもうおわかりですね。(*´▽`*)



function(1);

function(1,2);


の実行結果を見物しましょう。


            solarplexussより


🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞  🌞



#include <iostream>


using namespace std;


void function(int a) {

cout << a << "\n";

return;

}



void function(int a, int b) {

cout << a + b << "\n";

return;

}



int main() {


function(1);

function(1,2);

return 0;


}


ビルド実行結果



てんC「マックスさん、ソーラーさん😊


ビルド実行に成功しています。」


マックス「まさか


変数宣言


int a


が2回実行されているのに


ビルド実行できるとは思はなかったな。」


ソーラー「これは 意外な結果となったね。


自作関数functionの定義が異なっている場合


同じ変数名の変数宣言int aを


使用することができる


いいかえると


異なる自作メソッドfunctionでは


同じ変数名の変数aを用いてもかまわないんだね


2回 同じ変数aが作製されたことにはなりません」



😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊

前のエピソードでも述べましたように


異なる関数内で変数宣言された変数は


変数名が一緒でも


違う変数として


コンピュータに認識されます。


つまり


これらの2つの自作関数functionの定義

👇

void function(int a) {

cout << a << "\n";

return;

}


👇


void function(int a, int b) {

cout << a + b << "\n";

return;

}


内で

用いられている


変数a

変数名が一緒でも


異なる変数としてコンピュータに認識されています。


つまり

変数aを2回定義したことにはなりません。

😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊😊



ソーラー「では


自作関数functionの定義を



void function() {

int a=1;

cout << a << "\n";

return;

}



void function(int a, int b) {

cout << a + b << "\n";

return;

}


の2つ記述し


main関数内で


function();

function(1,2);



実行した場合でも


ちゃんとプログラムは実行されるのかな?」


マックス「ははあ



void function() {

int a=1;

cout << a << "\n";

return;

}


か・・・



void function(int a) {

cout << a << "\n";

return;

}


のように


引数部分に

変数宣言 int aをもってくるのではなく


ブロック{}内に


int a


をもってきたか・・・


この場合でも異なる自作関数内で


2回


変数宣言


int a



実行されることになるが


ビルドエラーを生じずに


プログラムを実行できるかどうかというわけか・・・」


ソーラー「そうなんだ(´▽`*)


プログラムの実行をお願い、てんC」


てんC「はいっ


自作関数functionの定義を



void function() {

int a=1;

cout << a << "\n";

return;

}



void function(int a, int b) {

cout << a + b << "\n";

return;

}


の2つを記述して


main関数内で


function();

function(1,2);



実行してみます。


#include <iostream>


using namespace std;


void function() {

int a=1;

cout << a << "\n";

return;

}



void function(int a, int b) {

cout << a + b << "\n";

return;

}



int main() {


function();

function(1,2);

return 0;


}


ビルド実行結果


1

3


ソーラー「やったね! 


異なる自作関数内で変数宣言された変数は


変数名が一緒でも


互いに異なる変数としてコンピュータに認識されるんだね。」













  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る