草庐IT

virtual-inheritance

全部标签

c++ - 在派生类中使用 'virtual'

我最近看到派生类中的代码,其中程序员将virtual放在重写的函数前面。这很常见吗?我觉得这很奇怪,有点让我措手不及。编辑:我不是在问virtual做什么,我是在问为什么有人会将virtual放在已经在其基类中覆盖虚函数的派生类中。前:classB{public:virtualvoidfoo();....};classD:publicB{public:virtualvoidfoo();//couldhavejustputvoidfoo();...}; 最佳答案 virtual是最高(最少派生)级别的可覆盖函数所必需的。它是可选的,但

C++ "Virtual functions but no virtual destructors"

我有一个基类Media和几个派生类,即DVD、Book等...基类写成:classMedia{private:intid;stringtitle;intyear;public:Media(){id=year=0;title="";}Media(int_id,string_title,int_year):id(_id),title(_title),year(_year){}//virtual~Media()=0;voidchangeID(intnewID){id=newID;}virtualvoidprint(ostream&out);};问题是:没有析构函数,GCC给了我一堆警告cla

c++ - 有效 C++ : discouraging protected inheritance?

我正在阅读ScottMeyers的EffectiveC++(第三版),并在第32项:确保公共(public)继承是页面上的“is-a”中的一段中151他发表评论(我用粗体表示):Thisistrueonlyforpublicinheritance.C++willbehaveasI'vedescribedonlyifStudentispubliclyderivedfromPerson.Privateinheritancemeanssomethingentirelydifferent(seeItem39),andprotectedinheritanceissomethingwhosemea

c++ - 保护 CRTP 模式免受 "pure virtual"调用中的堆栈溢出

考虑以下标准CRTP示例:#includetemplatestructBase{voidf(){static_cast(this)->f();}voidg(){static_cast(this)->g();}};structFoo:publicBase{voidf(){std::cout如果这是常规的虚拟继承,我可以标记虚拟f和g方法一样纯粹structBase{virtualvoidf()=0;virtualvoidg()=0;};并得到一个关于Foo的编译时错误是抽象的。但是CRTP没有提供这样的保护。我可以以某种方式实现它吗?运行时检查也是可以接受的。我想过比较this->f带有

c++ - 良好做法 : Default arguments for pure virtual method

我创建了一个抽象基类,它有一个带有默认参数的纯虚方法。classBase{...virtualsomeMethod(constSomeStruct&t=0)=0;...}classDerived:publicBase{...virtualsomeMethod(constSomeStruct&t=0);...}所以我想知道将默认参数设置为纯虚拟方法并将整体设置为虚拟方法是一种好习惯吗? 最佳答案 实际上,您的代码是默认参数最糟糕的使用模式之一,因为它涉及继承和多态行为。我支持查看相关的ScottMeyers提示的建议,但这里有一个简短

c++ - virtual void funcFoo() const = 0 和 virtual void funcFoo() = 0; 之间的区别

我在cpp中有一个声明,其中函数如下:virtualvoidfuncFoo()const=0;我假设如果声明为显式,则可以被另一个类继承,但有什么区别virtualvoidfuncFoo()=0;对我来说改进我的编程很重要,我想知道其中的区别。我不希望由于继承错误而导致故障。提前致谢。 最佳答案 第一个签名意味着可以在派生类型的const实例上调用该方法。第二个版本不能在const实例上调用。它们是不同的签名,因此通过实现第二个,您并没有实现或覆盖第一个版本。structBase{virtualvoidfoo()const=0;};

node.js - coffeescript 中的 'extends' 和 node.js 中的 'util.inherits' 之间的区别

我最近在学习Node.js。我对Node.js中的函数util.inherits有疑问。我可以在CoffeeScript中使用extends来替换它吗?如果不是,它们之间有什么区别? 最佳答案 是的,您可以使用extends代替它。至于区别?让我们先来看看CoffeeScript:classBextendsA我们来看看theJavaScripttheCoffeeScriptcompilerproduces对于这个JavaScript:varB,__hasProp={}.hasOwnProperty,__extends=functio

javascript - util.inherits - 替代或解决方法

我是node中的n00b,发现util.inherits()非常有用,除了它似乎替换了原始对象的整个原型(prototype)。例如:varmyClass=function(name){this._name=name;};myClass.prototype={(...)};util.inherits(myClass,require('events').EventEmitter);似乎抹去了我原来的原型(prototype)。这给我带来了两个不便:1-我必须在调用inherits,后向我的原型(prototype)声明添加属性varmyClass=function(name){this.

node.js - util.inherits - 如何在实例上调用 super 的方法?

我在玩util.inheritsmethodfromnode.js并且似乎无法获得所需的行为。varutil=require("util");functionA(){this.name='old';}A.prototype.log=function(){console.log('myoldnameis:'+this.name);};functionB(){A.call(this);this.name='new';}util.inherits(B,A);B.prototype.log=function(){B.super_.prototype.log();console.log('myn

virtual-machine - 将物理网卡绑定(bind)到 docker 容器

我的主机PC中安装了4个NIC。我想启动不同的docker容器,并将不同的物理网卡绑定(bind)到每个容器。我能为docker做些什么?对于VirtualBox,这可以通过为物理NIC的每个VM创建桥接适配器来完成。 最佳答案 当您使用-P或-p选项在Docker上公开端口时,它只是创建了一个iptables目标NAT或DNAT条目。您甚至可以通过运行以下命令来查看这些条目。iptables-tnat-nL...ChainDOCKER(2references)targetprotoptsourcedestinationDNATtc