C++のオーバーロードに関して

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
skuld

C++のオーバーロードに関して

#1

投稿記事 by skuld » 15年前

はじめまして、skuldと申します
はじめての書きこみなので読みづらかったら申し訳ないです
先日「Cの絵本」を読み終えて、現在「C++の絵本」を読んでいるのですが、
「C++の絵本」のオーバーロードに関するサンプルプログラムを以下のように試してみたのですが、
エラーが発生してしまいました。
エラー内容から、原因はarea =GetCircleArea(fRad);のdouble型引数の関数が
GetCircleArea(double,double)なのか、GetCircleArea(double)なのか区別できないということ
のようですが、本書にはエラーになるという記述はありませんでした。
これは区別できないと判断して良いのでしょうか?
ちなみに、本書では引数の数と型が合わないときエラーが発生するとは書いてありました

それから、もうひとつ関連した質問ですが、
下のサンプルで、引数省略したarea=GetCircleArea();も試してみたら、エラーになりました。
これもやはり区別できないからということでしょうか?
つまり、オーバーロードしたら引数省略は不可と考えてよいのでしょうか?

よろしくお願いします

Windows Vista
Visual C++ 2008EE
を使用しています
------------------------------------------
incude <stdio.h>

double GetCircleArea(int radius = 1,double pi = 3.14);
double GetCircleArea(double radius = 1.00,double pi = 3.14);
double GetCircleArea(double radius = 1.00);

int main(){
int nRad=10;
double fRad=10.1;
double area =1.1;
printf("%f\n",area);
area =GetCircleArea(10);
printf("%f\n",area);
area =GetCircleArea(15,3.14159);
printf("%f\n",area);
area =GetCircleArea(nRad,3.14159);
printf("%f\n",area);
area =GetCircleArea(fRad,3.14159);
printf("%f\n",area);
area =GetCircleArea(fRad);
printf("%f\n",area);
return 0;
}

double GetCircleArea(int radius,double pi){
return radius * radius * pi;
}
double GetCircleArea(double radius,double pi){
return radius * radius * pi;
}
double GetCircleArea(double radius){
return radius * radius * 3.14;
}

たいちう

Re:C++のオーバーロードに関して

#2

投稿記事 by たいちう » 15年前

> double GetCircleArea(double radius = 1.00,double pi = 3.14);
> double GetCircleArea(double radius = 1.00);
>
> area =GetCircleArea(fRad);
>
> これは区別できないと判断して良いのでしょうか?

Yes。
プログラムを書いた人の意図は、前者の呼出か後者の呼出か、
コンパイラには判断できません。
もちろん、書いた人以外の人間にも。

たかぎ

Re:C++のオーバーロードに関して

#3

投稿記事 by たかぎ » 15年前

実際にどんな記述になっていたのかわかりませんが...

今回のような関数を多重定義することも可能といえば可能ですが、決して使い勝手がよいとはいえませんし、いろいろな制約が課せられます。

skuld

Re:C++のオーバーロードに関して

#4

投稿記事 by skuld » 15年前

たいちうさん、たかぎさん
ありがとうございます

ずっと気になっていたんですが、
おかげですっきりしました

閉鎖

“C言語何でも質問掲示板” へ戻る