我在我的域中有FinanceRequests和CommisionTransactions。 如果我有一个FinanceRequest列表,每个FinanceRequest可能包含多个CommisionTransactions需要被回收。 不要担心这是如何完成的。 下面的这个类(很底)让我感到所有模糊和温暖,因为它很好地恢复和重用现有的代码。 types擦除的一个问题。 public void clawBack(Collection<FinanceRequest> financeRequestList) public void clawBack(Collection<CommissionTrns> commissionTrnsList) 擦除后它们都具有相同的签名,即: Collection<FinanceRequest> –> Collection<Object> Collection<CommissionTrns> –> Collection<Object> 所以日食抱怨: 方法clawBack(Collection)具有与另一种方法相同的擦除clawBack(Collection)方法CommissionFacade 任何build议重组这个,使它仍然是一个优雅的解决scheme,使良好的代码重用? public class CommissionFacade { /********FINANCE REQUESTS****************/ public void clawBack(FinanceRequest financeRequest) { Collection<CommissionTrns> commTrnsList = financeRequest.getCommissionTrnsList(); this.clawBack(commTrnsList); } public void clawBack(Collection<FinanceRequest> financeRequestList) { for(FinanceRequest finReq : financeRequestList) { this.clawBack(finReq); } } /********COMMISSION TRANSACTIOS****************/ […]
方法重载被认为是多态的一部分吗?
为什么C ++编译器给出这个错误? 为什么我可以从B访问lol(),但不能访问rofl()[不带参数]。 渔获在哪里? class A { public: void lol(void) {} void rofl(void) { return rofl(0);} virtual void rofl(int x) {} }; class B : public A { public: virtual void rofl(int x) {} }; int _tmain(int argc, _TCHAR* argv[]) { A a; a.lol(); a.rofl(1); a.rofl(); B b; b.lol(); b.rofl(1); b.rofl(); //ERROR -> B::rofl function […]
在下面的代码中,我定义了一个简单的logfunction。 main我尽量不要打电话。 我打电话std::log 。 不过,我自己的log被称为; 我看到“login” 在屏幕上。 有谁知道为什么? 我使用G ++ 4.7和clang ++ 3.2。 #include <iostream> #include <cmath> double log(const double x) { std::cout << "log!\n"; return x; } int main(int argc, char *argv[]) { std::log(3.14); return 0; }
正如这样说: http://web.archive.org/web/20090624083829/http://mail.python.org/pipermail/python-list/2003-May/206149.html Python中没有函数重载。 就我觉得这是一个很大的障碍,因为它也是面向对象语言。 最初我发现无法区分参数types是困难的,但是Python的dynamic性使它变得容易(例如,列表,元组,string非常相似)。 然而,通过参数的数量,然后做这个工作就像一个矫枉过正的事情。
我想定义一个类MyStream以便: MyStream myStream; myStream << 1 << 2 << 3 << std::endl << 5 << 6 << std::endl << 7 << 8 << std::endl; 给出输出 [blah]123 [blah]56 [blah]78 基本上,我想在前面插入一个“[blah]”,然后在每个非终止 std::endl之后插入? 这里的难点不是逻辑pipe理,而是检测和重载std::endl的处理。 有没有一个优雅的方式来做到这一点? 谢谢! 编辑:我不需要在逻辑pipe理的build议。 我需要知道如何检测/超载打印std::endl 。
我重载函数add() ,但是当我使用float数据types时,它显示一个错误。 但是,当我将其更改为double ,它工作正常。 为什么float导致错误? 代码是: #include <iostream> using namespace std; class students{ private: int i; float f; public: void add(int b){ i=b; cout << "First Int: " << i; } void add(float c){ f=c; cout << "Second Int: " << f; } }; int main(){ students obj; obj.add(9); obj.add(5.5); } 错误: In function 'int […]
我想打印两个不同的东西,取决于是否用Foo::print()静态调用函数或从Foo foo; foo.print();的实例中调用函数Foo foo; foo.print(); Foo foo; foo.print(); 编辑:这是一个类定义,绝对不能正常工作,已经有几个人回答了。 class Foo { string bla; Foo() { bla = "nonstatic"; } void print() { cout << bla << endl; } static void print() { cout << "static" << endl; } }; 但是,有没有一个很好的方法来达到这个效果呢? 基本上我想这样做: if(this is a static call) do one thing else do another thing 换句话说,我知道PHP可以检查*thisvariables是否被定义,以确定函数是否被静态调用。 […]
我有两个class。 public class A { public Object method() {…} } public class B extends A { @Override public Object method() {…} } 我有一个B的实例。如何从b调用A.method()? 基本上和从B调用super.method()的效果一样。 B b = new B(); Class<?> superclass = b.getClass().getSuperclass(); Method method = superclass.getMethod("method", ArrayUtils.EMPTY_CLASS_ARRAY); Object value = method.invoke(obj, ArrayUtils.EMPTY_OBJECT_ARRAY); 但是上面的代码仍然会调用B.method()
我正在观看Anders关于C#4.0的讨论以及C#5.0的预览 ,这让我想到了C#中可选参数何时可用,推荐的方法是声明不需要指定所有参数的方法。 比如像FileStream这样的类有大约15个不同的构造函数,它们可以被分成逻辑“家族”,比如下面的string, IntPtr和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); 在我看来,这种types的模式可以简化为具有三个构造函数,并使用可选的参数作为可缺省的参数,这将使不同的构造函数族更加清晰[注:我知道这个变化不会是在BCL制造的,我假设这种情况是在说话]。 你怎么看? 从C#4.0开始,将更紧密相关的构造函数和方法组合成一个具有可选参数的单一方法,还是有一个很好的理由来支持传统的多重过载机制?