关于下面的C ++程序: class Base { }; class Child : public Base { }; int main() { // Normal: using child as base is allowed Child *c = new Child(); Base *b = c; // Double pointers: apparently can't use Child** as Base** Child **cc = &c; Base **bb = cc; return 0; } GCC在最后的赋值语句上产生以下错误: error: […]
动物是狗和狗的超级有一种叫做树皮的方法 public void bark() { System.out.println("woof"); } 考虑以下几点: Animal a = new Dog(); if (a instanceof Dog){ a.bark(); } 会发生什么? 该分配是不允许的 树皮的呼叫是允许的,并在运行时打印“woof” 树皮的呼叫是允许的,但没有打印 对树皮的调用导致编译时错误 对树皮的调用导致运行时错误 我说2,因为我们正在检查对象是否是狗; 因为狗是与树皮方法类,如果它是,那么我们把它打印出来:s 我的理解在这里正确吗?
我不确定这是否是一件奇怪的事情,或者如果它是一些代码味道…但我想知道是否有一种方法(某种types的oop模式会很好)来“投”基types转换为其派生types的forms。 我知道这是没有意义的,因为派生types将具有父类不提供的附加function,这在本身并不是根本上合理的。 但有没有办法做到这一点? 这里是一个代码示例,以便我可以更好地解释我所要求的。 public class SomeBaseClass { public string GetBaseClassName {get;set;} public bool BooleanEvaluator {get;set;} } public class SomeDerivedClass : SomeBaseClass { public void Insert(SqlConnection connection) { //…random connection stuff cmd.Parameters["IsItTrue"].Value = this.BooleanEvalutar; //… } } public static void Main(object[] args) { SomeBaseClass baseClass = new SomeBaseClass(); SomeDerivedClass derClass = (SomeDerivedClass)baseClass; derClass.Insert(new sqlConnection()); } […]
我需要扩展Networkx python包,并为我的特殊需要添加一些Graph类的方法 我想这样做的方法是简化派生一个新的类NewGraph ,并添加所需的方法。 然而networkx中还有其他一些函数可以创build和返回Graph对象(例如生成一个随机图)。 我现在需要将这些Graph对象变成NewGraph对象,以便我可以使用我的新方法。 这样做的最好方法是什么? 还是应该以完全不同的方式来解决问题呢?
我如何从父类调用子类的function? 考虑这个: class whale { function __construct() { // some code here } function myfunc() { // how do i call the "test" function of fish class here?? } } class fish extends whale { function __construct() { parent::construct(); } function test() { echo "So you managed to call me !!"; } }
实现从List<T>inheritance的新类的最快方法是什么? class Animal {} class Animals : List<Animal> {} // (1) 我遇到的一个问题:通过简单地做(1) ,我发现我没有得到从List<T>inheritance任何构造函数的好处。 最后,我想Animals行为很像一个List<T> (例如,可以构build,与Linq兼容)。 但是,另外,我也希望能够添加我自己的自定义方法。
是否有可能在ES6中扩展一个类而不调用super方法来调用父类? 编辑:这个问题可能是误导。 是我们必须调用super()还是缺less一些东西? 例如: class Character { constructor(){ console.log('invoke character'); } } class Hero extends Character{ constructor(){ super(); // exception thrown here when not called console.log('invoke hero'); } } var hero = new Hero(); 当我没有调用派生类super()我得到一个范围问题 – > this is not defined 我用v2.3.0中的iojs –harmony来运行这个
最近我的一位朋友问我如何防止C ++中的类inheritance。 他想编辑失败。 我在想这个,find了3个答案。 不知道哪一个是最好的。 1)私人build构者 class CBase { public: static CBase* CreateInstance() { CBase* b1 = new CBase(); return b1; } private: CBase() { } CBase(CBase3) { } CBase& operator=(CBase&) { } }; 2)使用CSealed基类,私有和虚拟inheritance class CSealed { private: CSealed() { } friend class CBase; }; class CBase : virtual CSealed { public: CBase() { […]
我不明白为什么在下面的代码中,当我instanciate daughtertypes的对象,默认的grandmother()构造函数被调用? 我认为应该调用grandmother(int)构造函数(遵循mother类构造函数的规范),否则这个代码根本不应该编译,因为虚拟inheritance。 这里编译器默默地在我的后面调用grandmother默认构造函数,而我从来没有要求它。 #include <iostream> class grandmother { public: grandmother() { std::cout << "grandmother (default)" << std::endl; } grandmother(int attr) { std::cout << "grandmother: " << attr << std::endl; } }; class mother: virtual public grandmother { public: mother(int attr) : grandmother(attr) { std::cout << "mother: " << attr << std::endl; } }; class […]
我正在寻找一个很好的,干净的方式来解决这个事实,即PHP5仍然不支持多重inheritance。 这是类层次结构: 信息 – TextMessage ——– InvitationTextMessage – EmailMessage ——– InvitationEmailMessage 这两种Invitation *类有很多共同点, 我很想有一个共同的父类,邀请,他们都将inheritance。 不幸的是,他们也和他们现在的祖先有很多共同点:TextMessage和EmailMessage。 这里传统的对多重inheritance的渴望。 解决问题最轻量化的方法是什么? 谢谢!