私はちょうど知りたかった 過負荷の間に関数呼び出しを行う上で決定的な要素は何ですか?私はパラメータのシグネチャを知っているので、パラメータの数は重要な役割を果たす を渡しました。しかし、オーバーロード中に重要な部分である の部分を再生するconst部分もあります。 1番目と2番目の関数のオーバーロードは正常に機能しますが、渡されたパラメータの中でconstを持つ3番目の関数 を追加すると、コンパイルエラーが発生します。 int A::sum(int, int) and int A::sum(int, int) cannot be overloaded
。ただ、クラスのコードスニペットを与える:私は通常のオブジェクトを宣言し、最初の関数が呼び出されると、constオブジェクト第2の和の場合には取得し合計する呼び出しを行うと関数のオーバーロード中に呼び出されるものは何ですか?
class A
{
private:
int x;
int y;
public:
int sum (int a, int b)
{
cout << " Inside 1st ";
return (a+b) ;
}
int sum (int a ,int b) const
{
cout << " Inside 2nd ";
return (a+b) ;
}
int sum (const int a ,const int b)
{
cout << " Inside 3rd ";
return (a+b) ;
}
A(){x=0;y=0;}
~A(){};
};
することと呼ばれています。それは完璧です。しかし、もし私が第一と第三の機能を書いたらそれは問題になります。なぜそうなのか?
'void f(T);'として関数を宣言すると* void *(T const x){/ * ... * /} 'として定義することができます。言い換えれば、値パラメータのconstanceは、実装スコープ内のローカル変数のconstanceにのみ影響し、関数が*呼び出される方法とは何の関係もないため、実装の詳細です。 –