如何阻止类被其他类inheritance。
为什么下面的代码会产生这个错误,即使c是一个结构,默认情况下有一个公共inheritance? struct c { protected: int i; public: c(int ii=0):i(ii){} virtual c *fun(); }; c* c::fun(){ cout<<"in c"; return &c(); } class d : c { public: d(){} d* fun() { i = 9; cout<<"in d"<<'\t'<<i; return &d(); } }; int main() { c *cc; d dd; cc = ⅆ cc->fun(); }
// Don't break the function prototype. // pd – https://github.com/Raynos/pd var proto = Object.create(Function.prototype, pd({ "prop": 42 })); var f = function() { return "is a function"; }; f.__proto__ = proto; console.log(f.hasOwnProperty("prop")); // false console.log(f.prop); // 42 console.log(f()); // "is a function" .__proto__是非标准的,不推荐使用。 我应该如何inheritance原型创build一个对象,但该对象是一个函数。 Object.create返回一个对象不是一个函数。 new Constructor返回一个对象不是一个函数。 动机: – 跨浏览器finherit var finherit = function (parent, […]
在插槽上的Python数据模型参考部分中,有一个使用__slots__的注释列表。 我对第一和第六项感到十分困惑,因为它们似乎是相互矛盾的。 第一项: 从没有__slots__的类inheritance时,该类的__dict__属性总是可访问的,所以子类中的__slots__定义是没有意义的。 第六项: __slots__声明的操作仅限于定义的类。 因此,子类将有一个__dict__除非它们也定义了__slots__ (它只能包含任何附加槽的名称)。 在我看来,这些项目可能更好措辞或通过代码显示,但我一直试图围绕这一点,我仍然感到困惑。 我明白__slots__是如何被使用的 ,我正试图更好地把握他们的工作方式。 问题: 有人可以用简单的语言向我解释什么条件是子类inheritance的插槽? (简单的代码示例将是有用的,但不是必要的。)
本来我想问这个问题 ,但后来我发现它已经被认为之前… 谷歌search我发现这个扩展configparser的例子。 以下使用python 3: $ python3 Python 3.2.3rc2 (default, Mar 21 2012, 06:59:51) [GCC 4.6.3] on linux2 >>> from configparser import SafeConfigParser >>> class AmritaConfigParser(SafeConfigParser): … def __init_(self): … super().__init__() … >>> cfg = AmritaConfigParser() 但不是用python2: >>> class AmritaConfigParser(SafeConfigParser): … def __init__(self): … super(SafeConfigParser).init() … >>> cfg = AmritaConfigParser() Traceback (most recent call last): […]
我希望能够做到这一点: class myInt : public int { }; 为什么我不能? 我为什么要? 更强的打字 例如,我可以定义两个类intA和intB ,它们让我做intA + intA或intB + intB ,而不是intA + intB 。 “我不是class级。” 所以呢? “Ints没有任何会员资料。” 是的,他们有32位,或者其他什么。 “Ints没有任何成员职能”。 那么,他们有一大堆运营商像+和- 。
编辑:答案摘要 在下面,B是A的一个子类。 这是一个术语问题; 因为B 不能从A的接口借用,所以Ctors和dtors 不是inheritance的。 一个类至less有一个构造函数,并且只有一个析构函数。 构造函数 : B不从Ainheritance构造函数; 除非B的明确地呼叫A的Ctor 之一,否则A的默认Ctor会在 B的Ctor主体之前被自动调用(这个想法是A在B被创build之前需要被初始化)。 破坏者 : B不inheritanceA的dtor; B退出后,B的析构函数会自动调用A的析构函数。 致谢:特别要感谢Oli Charlesworth和Kos的回答,我把Kos的答案设定为解决scheme,因为这是我最理解的。 原来的post 当您在Google上search“C ++析构函数inheritance网站:stackoverflow.com”时,您当前find以下post: 构造函数和析构函数inheritance :具有30k +声望的两个用户说它是inheritance的,而不是 虚拟析构函数是inheritance的吗? :这里没有提到会指向不被inheritance的析构函数 C ++中的析构函数和inheritance? :评论似乎表明析构函数是inheritance的 Q1:我从实践中知道的是,如果不明确定义派生类的构造函数,就不能用相同的原型初始化派生对象,这是正确的吗? 即使从post中可以清楚地看到,析构函数似乎是被inheritance的,但是我仍然对这样一个事实感到困惑,那就是32k声誉的用户不会这么说。 我写了一个小例子来说明大家的想法: #include <cstdio> /******************************/ // Base class struct A { A() { printf( "\tInstance counter = %d (ctor)\n", ++instance_counter ); } ~A() { […]
我有一个面向对象的层次结构,它的代码本身需要尽可能多的维护。 例如, class Swallow(object): def airspeed(self): """Returns the airspeed (unladen)""" raise NotImplementedError class AfricanSwallow(Swallow): def airspeed(self): # whatever 现在,问题是AfricanSwallow.airspeed不会inheritance超类方法的文档string。 我知道我可以使用模板方法模式,即保持文档string class Swallow(object): def airspeed(self): """Returns the airspeed (unladen)""" return self._ask_arthur() 并在每个子类中实现_ask_arthur 。 但是,我想知道是否有另一种方式来让文档被inheritance,也许还有一些我还没有发现的装饰器呢?
我仍然对这件事有些困惑。 我到现在为止发现的是 (类似的问题已经在这里被问到,但我还有其他一些观点。) 接口是唯一抽象方法和最终字段的集合。 Java中没有多重inheritance。 接口可以用来在Java中实现多重inheritance。 inheritance的一个优点是我们可以在派生类中使用基类的代码,而不需要再次编写它。 可能这是inheritance的最重要的事情在那里。 现在.. Q1。 由于接口只有抽象方法(无代码),所以我们怎么说如果我们正在实现任何接口,那么它是inheritance? 我们没有使用它的代码。 Q2。 如果实现一个接口不是inheritance,那么如何使用接口来实现多inheritance? Q3。 无论如何,使用接口有什么好处? 他们没有任何代码。 我们需要在我们实现它的所有类中一遍又一遍地编写代码。 那为什么要做接口? 注意:我发现了一个界面有帮助的例子。 其中一个例子就像在Runnable接口中我们有public void run()方法,在这个方法中我们定义了线程的function,并且在编码中内置了这个方法将作为一个单独的线程来运行。 所以我们只需要编码在线程中做什么,Rest是预定义的。 但是这个东西也可以用抽象类来实现。 那么使用接口有什么好处呢? 我们使用接口实现的是多重inheritance吗?
我有一个很多__init__参数的基类: def BaseClass(object): def __init__(self, a, b, c, d, e, f, …): self._a=a+b self._b=b if b else a … 所有的inheritance类都应该运行基类的__init__方法。 我可以在每个要调用超类__init__的inheritance类中写一个__init__()方法,但这会是一个严重的代码重复: def A(BaseClass): def __init__(self, a, b, c, d, e, f, …): super(A, self).__init__(a, b, c, d, e, f, …) def B(BaseClass): def __init__(self, a, b, c, d, e, f, …): super(A, self).__init__(a, b, c, […]