タグ付けされた質問 「overloading」

オーバーロードおよびオーバーロードという用語は、以下を参照する場合があります。-コンストラクターおよびメソッドのオーバーロード、渡されたパラメーターのデータ型に基づいて同じ名前の異なる関数が呼び出される一種の多態性-演算子のオーバーロード、関数またはメソッドのオーバーロードの形式オーバーロードされるアクションは+または-などの演算子です


4
String.valueOf(null)がNullPointerExceptionをスローするのはなぜですか?
ドキュメントによると、メソッドString.valueOf(Object obj)は次を返します: 引数がの場合null、次に等しい文字列"null"。それ以外の場合は、の値obj.toString()が返されます。 しかし、私がこれをやろうとするとどうなりますか: System.out.println("String.valueOf(null) = " + String.valueOf(null)); 代わりにNPEをスローしますか?(信じられない場合は自分で試してください!) スレッド「メイン」の例外java.lang.NullPointerException java.lang.String。(不明なソース) java.lang.String.valueOf(Unknown Source)で なぜこれが起こっているのですか?ドキュメントは私に嘘をついていますか?これはJavaの大きなバグですか?

5
「is_base_of」はどのように機能しますか?
次のコードはどのように機能しますか? typedef char (&yes)[1]; typedef char (&no)[2]; template <typename B, typename D> struct Host { operator B*() const; operator D*(); }; template <typename B, typename D> struct is_base_of { template <typename T> static yes check(D*, T); static no check(B*, int); static const bool value = sizeof(check(Host<B,D>(), int())) == sizeof(yes); }; …


11
非constメソッドがプライベートのときにpublic constメソッドが呼び出されないのはなぜですか?
このコードを考えてみましょう: struct A { void foo() const { std::cout << "const" << std::endl; } private: void foo() { std::cout << "non - const" << std::endl; } }; int main() { A a; a.foo(); } コンパイラエラーは次のとおりです。 エラー: 'void A :: foo()' is private`。 しかし、私がプライベートのものを削除すると、それはうまくいきます。非constメソッドがプライベートのときにpublic constメソッドが呼び出されないのはなぜですか? 言い換えると、なぜ過負荷解決がアクセス制御の前に来るのですか?これは奇妙です。一貫していると思いますか?コードが機能してからメソッドを追加しましたが、機能しているコードがまったくコンパイルされません。


8
パラメータがリテラルnull値の場合、オーバーロードされたメソッドはどのように選択されますか?
私はクイズでこの質問に出くわしました、 public class MoneyCalc { public void method(Object o) { System.out.println("Object Verion"); } public void method(String s) { System.out.println("String Version"); } public static void main(String args[]) { MoneyCalc question = new MoneyCalc(); question.method(null); } } このプログラムの出力は「文字列バージョン」です。しかし、オーバーロードされたメソッドにnullを渡すと文字列バージョンが選択される理由を理解できませんでした。nullは何も指していないString変数ですか? ただし、コードを次のように変更すると、 public class MoneyCalc { public void method(StringBuffer sb) { System.out.println("StringBuffer Verion"); } public …
98 java  overloading 

13
C#4.0でオーバーロードまたはオプションのパラメーターを使用してメソッドを宣言する必要がありますか?
C#4.0についてのアンダースの話とC#5.0のプレビューを見ていて、C#でオプションのパラメーターが利用できる場合、すべてのパラメーターを指定する必要のないメソッドを宣言するために推奨される方法は何かを考えましたか? たとえば、何かFileStreamのクラスは、論理の家族'という文字列から、以下の例のものに分けることができる15程度異なるコンストラクタ、からのものがあるIntPtrとAからのものをSafeFileHandle。 FileStream(string,FileMode); FileStream(string,FileMode,FileAccess); FileStream(string,FileMode,FileAccess,FileShare); FileStream(string,FileMode,FileAccess,FileShare,int); FileStream(string,FileMode,FileAccess,FileShare,int,bool); このタイプのパターンは、代わりに3つのコンストラクターを使用し、デフォルトのパラメーターにオプションのパラメーターを使用することで簡略化できるように思えます。これにより、コンストラクターの異なるファミリーをより明確にすることができますBCLで作成された、私はこの種の状況について仮説的に話している]。 どう思いますか?C#4.0以降では、コンストラクターとメソッドの密接に関連するグループをオプションのパラメーターを持つ単一のメソッドにする方が理にかなっていますか、それとも従来の多くのオーバーロードメカニズムに固執する十分な理由がありますか?

1
+を使用してラムダの関数ポインタとstd :: functionのあいまいなオーバーロードを解決する
次のコードでは、への最初の呼び出しfooがあいまいであるため、コンパイルに失敗します。 2番目は+、ラムダの前に追加され、関数ポインターオーバーロードに解決されます。 #include <functional> void foo(std::function<void()> f) { f(); } void foo(void (*f)()) { f(); } int main () { foo( [](){} ); // ambiguous foo( +[](){} ); // not ambiguous (calls the function pointer overload) } +ここでの表記は何ですか?

4
モジュールをPythonに「再インポート」し、インポート後にコードを変更する方法
私は foo.py def foo(): print "test" IPythonでは次のものを使用します。 In [6]: import foo In [7]: foo.foo() test 次に、foo()を次のように変更しました。 def foo(): print "test changed" IPythonでは、呼び出しの結果はtest次のとおりです。 In [10]: import foo In [11]: foo.foo() test それから私は使用します: In [15]: del foo In [16]: import foo In [17]: foo.foo() test foo.pyc同じフォルダにあるものを削除しますfoo.pyが、それでも運がありません。 実行時に更新されたコードを再インポートする方法を教えてもらえますか?

3
最も負のint値は、あいまいな関数のオーバーロードに関するエラーを引き起こすのはなぜですか?
私はC ++での関数のオーバーロードについて学び、これに遭遇しました: void display(int a) { cout << "int" << endl; } void display(unsigned a) { cout << "unsigned" << endl; } int main() { int i = -2147483648; cout << i << endl; //will display -2147483648 display(-2147483648); } 私が理解したことから、int範囲(私の場合intは4バイト)で指定された値は呼び出されdisplay(int)、この範囲外の値はあいまいになります(コンパイラーが呼び出す関数を決定できないため)。これはint、最小値を除くすべての値の範囲、つまり-2147483648エラーでコンパイルが失敗する場合に有効です。 オーバーロードの呼び出しdisplay(long int)があいまいです しかし、同じ値をに取り、その値を出力するintと、になります2147483648。私は文字通りこの振る舞いに混乱しています。 この動作は、最も負の数が渡されたときにのみ観察されるのはなぜですか?(a shortが-32768- と一緒に使用された場合の動作は同じです。実際には、負の数と正の数が同じ2進数表現を持つ場合) 使用するコンパイラ:g ++(GCC)4.8.5

5
Pythonで関数をオーバーロードしましたか?
Pythonで関数をオーバーロードすることは可能ですか?C#では次のようなことをします void myfunction (int first, string second) { //some code } void myfunction (int first, string second , float third) { //some different code } 次に、関数を呼び出すと、引数の数に基づいて2つを区別します。Pythonで同様のことを行うことは可能ですか?


8
Javascript関数でパラメーターを渡さないとどうなりますか?
私はJavascriptの世界に不慣れで、非常に基本的な関数を書くことをいじくり回していて、偶然に以下の例に出くわしました。関数が要求するときにパラメーターを渡さないのになぜそれが機能するのかわかりません。 サンプル関数 function myfunction(x) { alert("This is a sample alert"); } 関数を呼び出すmyfunction();と、アラートが表示されます。パラメータを渡していないのに、エラーや警告なしに関数を呼び出すことができるのはなぜですか? 編集 私はそれほど多くの素晴らしい答えを期待していませんでした、そして私はまだどの答えが最良であるかを言うことができる立場にないので、人々に最良の答えを提案するように頼むことができます、そして私はその人に受け入れを与えます。

7
このプロパティが派生クラスで上書きされている場合、基本クラスのプロパティを呼び出すにはどうすればよいですか?
私のいくつかのクラスを、ゲッターとセッターの広範な使用から、プロパティのよりPython的な使用に変更しています。 しかし、以前のゲッターまたはセッターの一部が基本クラスの対応するメソッドを呼び出してから、別のことを実行するため、今は行き詰まっています。しかし、これはどのようにプロパティで達成できますか?親クラスでプロパティゲッターまたはセッターを呼び出す方法は? もちろん、属性自体を呼び出すだけで、無限の再帰が得られます。 class Foo(object): @property def bar(self): return 5 @bar.setter def bar(self, a): print a class FooBar(Foo): @property def bar(self): # return the same value # as in the base class return self.bar # --> recursion! @bar.setter def bar(self, c): # perform the same action # as in the …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.