我阅读了维基百科有关在C ++中使用静态(读:编译时)多态性的好奇的循环模板模式的文章 。 我想概括它,以便我可以根据派生types更改函数的返回types。 (这看起来应该是可能的,因为基types从模板参数中知道派生types)。 不幸的是,下面的代码不会使用MSVC 2010进行编译(我现在还没有轻松访问gcc,所以我还没有尝试过)。 任何人知道为什么 template <typename derived_t> class base { public: typedef typename derived_t::value_type value_type; value_type foo() { return static_cast<derived_t*>(this)->foo(); } }; template <typename T> class derived : public base<derived<T> > { public: typedef T value_type; value_type foo() { return T(); //return some T object (assumes T is default constructable) } […]
为什么Java指定重写方法的访问说明符可以允许比重写的方法更多(但不less于)的访问? 例如,超类中的受保护实例方法可以在子类中公开,但不是私有的。
我遇到了许多反对在C#中包含多重inheritance的论据,其中一些包括(除了哲学论据): 多inheritance过于复杂,往往含糊不清 这是不必要的,因为接口提供了类似 在界面不合适的情况下,构图是一个很好的替 我来自C ++背景,错过了多重inheritance的力量和优雅。 虽然它不适用于所有的软件devise,但有些情况很难否定它在接口,组合和类似的OO技术上的实用性。 是否排除了多重inheritance,认为开发者不够聪明,无法明智地使用它们,而且当它们出现时又不能解决复杂问题呢? 我个人会欢迎将多重inheritance引入到C#中(可能是C ##)。 附录 :我想知道从单一(或程序背景)与多重inheritance背景来的答复。 我经常发现没有多重inheritance经验的开发人员往往会默认为多重inheritance是不必要的,因为他们对这个范例没有任何经验。
我目前正在学习Java课程中的类inheritance,我不明白何时使用super()调用? 编辑: 我发现这个代码的例子super. variable super. variable被使用: class A { int k = 10; } class Test extends A { public void m() { System.out.println(super.k); } } 所以我明白,在这里,你必须使用super来访问超类中的kvariables。 但是,在其他情况下, super();是什么super(); 做? 在其自己的?
我正在阅读“Java教程”(第二次)。 我刚刚通过Interfaces(再次)的一节,但仍不明白Java接口如何模拟多重inheritance。 有没有比书中更清楚的解释?
class A { public: void eat(){ cout<<"A";} }; class B: virtual public A { public: void eat(){ cout<<"B";} }; class C: virtual public A { public: void eat(){ cout<<"C";} }; class D: public B,C { public: void eat(){ cout<<"D";} }; int main(){ A *a = new D(); a->eat(); } 我了解钻石问题,上面的代码没有这个问题。 虚拟inheritance如何解决问题? 我的理解是:当我说A *a = new […]
我的代码是 public class Parent { public Parent(int i) { Console.WriteLine("parent"); } } public class Child : Parent { public Child(int i) { Console.WriteLine("child"); } } 我收到错误: 父母不包含带有0个参数的构造函数。 我明白问题是, Parent没有0参数的构造函数。 但我的问题是,为什么我们需要一个零参数的构造函数? 为什么没有它的代码工作?
我已经到了一个地步,我需要在JavaScript中发生一些基本的多重inheritance。 (我不是在这里讨论这是不是一个好主意,所以请把这些评论留给自己。) 我只想知道是否有人试图取得任何成功,以及他们是如何去做的。 为了解决这个问题,我真正需要的是能够拥有一个能够从一个以上的原型链inheritance一个属性的对象(即每个原型可以拥有自己的链),但是按照给定的优先顺序search链为了第一个定义)。 为了certificate这在理论上是可能的,可以通过将次链连接到主链的末端来实现,但是这会影响所有以前原型的所有实例,这不是我想要的。 思考? 编辑欣赏响应人员,但虽然共识似乎是静态复制两个树的属性,这将在大多数情况下工作(也可能是我最终做的),我最感兴趣的dynamic解决scheme,将允许单独的原型链被改变,并且仍然具有由实例“拾取”的那些改变。
我有几个不需要任何状态的类。 从组织的angular度来看,我想把它们分层次。 但似乎我不能声明静态类的inheritance。 类似的东西: public static class Base { } public static class Inherited : Base { } 不pipe用。 为什么这个语言的devise者closures了这种可能性呢?
从我以前的问题继续我一直在努力让我的对象模型序列化为XML。 但现在我遇到了一个问题(quelle惊喜!)。 我遇到的问题是我有一个集合,它是一个抽象的基类types,由具体派生types填充。 我认为只要将XML属性添加到所有涉及的类中就可以了,而且一切都会很好。 可悲的是,情况并非如此! 所以我已经做了一些挖掘谷歌,我现在明白为什么它不工作。 因为XmlSerializer实际上是在进行一些聪明的reflection,以便将对象序列化到XML中,并且由于它基于抽象types,所以它无法弄清楚它到底在说什么 。 精细。 我在CodeProject上遇到了这个页面 ,看起来它可能有很大的帮助(但完全读取/消耗),但我想我也想把这个问题带到StackOverflow表中,看看你是否有任何整洁黑客/技巧,以便以最快/最轻的方式启动和运行。 我还应该补充的一点是,我不想沿着XmlInclude路线走下去。 只是有太多的耦合,系统的这个领域正在大力发展,所以这将是一个真正的维护头痛!