草庐IT

virtual-inheritance

全部标签

c++ - "pure virtual function call"崩溃从何而来?

我有时会注意到程序在我的计算机上崩溃并显示错误:“纯虚函数调用”。当无法从抽象类创建对象时,这些程序如何编译? 最佳答案 如果您尝试从构造函数或析构函数进行虚函数调用,则可能会出现这种情况。由于您不能从构造函数或析构函数调用虚函数(派生类对象尚未构造或已被销毁),因此它调用基类版本,在纯虚函数的情况下,不会'不存在。classBase{public:Base(){reallyDoIt();}voidreallyDoIt(){doIt();}//DON'TDOTHISvirtualvoiddoIt()=0;};classDerived

c++ - 什么时候虚拟继承是一个好的设计?

EDIT3:请务必在回答之前清楚地理解我的要求(有EDIT2和很多评论)。有(或曾经)很多答案清楚地表明了对问题的误解(我知道这也是我的错,对此感到抱歉)您好,我查看了有关C++中虚拟继承(classB:publicvirtualA{...})的问题,但没有找到我的问题的答案。我知道虚拟继承存在一些问题,但我想知道在哪些情况下虚拟继承会被认为是一种好的设计。我看到有人提到像IUnknown或ISerializable这样的接口(interface),而且iostream的设计是基于虚拟继承的。这些是很好地使用虚拟继承的好例子吗,仅仅是因为没有更好的选择,还是因为在这种情况下虚拟继承是正

c++ - 什么时候虚拟继承是一个好的设计?

EDIT3:请务必在回答之前清楚地理解我的要求(有EDIT2和很多评论)。有(或曾经)很多答案清楚地表明了对问题的误解(我知道这也是我的错,对此感到抱歉)您好,我查看了有关C++中虚拟继承(classB:publicvirtualA{...})的问题,但没有找到我的问题的答案。我知道虚拟继承存在一些问题,但我想知道在哪些情况下虚拟继承会被认为是一种好的设计。我看到有人提到像IUnknown或ISerializable这样的接口(interface),而且iostream的设计是基于虚拟继承的。这些是很好地使用虚拟继承的好例子吗,仅仅是因为没有更好的选择,还是因为在这种情况下虚拟继承是正

ruby - 我如何 "Inherit"一个 Ruby 模块来创建另一个模块?

关闭。这个问题是opinion-based.它目前不接受答案。想改善这个问题吗?更新问题,以便可以通过editingthispost用事实和引文回答问题.7年前关闭。Improvethisquestion我一直在为一些第三方产品DBAPI开发Ruby包装器。API是REST式的,具有产品、类别、公司、事件等模型,以及API端点,如/api/Product.getInfo.我的方法是使用API调用包装器和方便的方法为这些API模型创建相应的Ruby类。所有这些模型类共享同一个父类Base,它抽象了API调用并具有其他共同特征。这些API模型之间有很多相似之处。例如,产品、公司和事件模型可

ruby - 在父类(super class)的 self.inherited 中访问匿名类的名称

我想访问其父类(superclass)中的类名MySuperclass'self.inherited方法。它适用于classFoo定义的具体类但是在使用匿名类时失败了。我倾向于避免在测试中创建(类)常量;我希望它能与匿名类一起使用。给定以下代码:classMySuperclassdefself.inherited(subclass)super#workwithsubclass'nameendendklass=Class.new(MySuperclass)dodefself.name'FooBar'endendklass#name仍将是nil什么时候MySuperclass.inheri

ruby-on-rails - RSpec mock_model 和 inherited_resources

我正在尝试为inherited_resourcesController编写规范。我决定使用rspec的mock_model模拟所有与数据库的集成。不幸的是,我无法为创建和更新操作编写规范,因为我收到以下错误:https://gist.github.com/936947有人可以帮我解决这个问题吗? 最佳答案 我在使用flexmock时遇到了同样的问题。原因是它没有使用update_attributes方法来做出路由决策。它检查resource.errors以查看它是否为空。因此,为了让它正确响应,我们还需要模拟errors方法。这是l

C++ 风格 : Prefixing virtual keyword to overridden methods

我一直在与我的同事讨论是否在被覆盖的方法前加上virtual关键字,或者只在原始基类中添加前缀。我倾向于在所有虚拟方法(即涉及vtable查找的方法)前面加上virtual关键字。我的理由有三个:鉴于C++缺少覆盖关键字,虚拟的存在关键字至少会通知您该方法涉及查找和理论上可以被覆盖进一步的特化,或可能是通过指向更高级别的指针调用基类。一直使用这种风格意味着,当你看到一个方法时(至少在我们的代码中)没有virtual关键字,你可以最初假设它既不是源自基础或专业在子类中。如果由于某些错误,virtual已从IFoo中删除,所有children仍然可以正常工作(CFooSpecializat

C++ 风格 : Prefixing virtual keyword to overridden methods

我一直在与我的同事讨论是否在被覆盖的方法前加上virtual关键字,或者只在原始基类中添加前缀。我倾向于在所有虚拟方法(即涉及vtable查找的方法)前面加上virtual关键字。我的理由有三个:鉴于C++缺少覆盖关键字,虚拟的存在关键字至少会通知您该方法涉及查找和理论上可以被覆盖进一步的特化,或可能是通过指向更高级别的指针调用基类。一直使用这种风格意味着,当你看到一个方法时(至少在我们的代码中)没有virtual关键字,你可以最初假设它既不是源自基础或专业在子类中。如果由于某些错误,virtual已从IFoo中删除,所有children仍然可以正常工作(CFooSpecializat

c++ - 在 C++ 中,我应该几乎总是使用虚拟继承吗?

我从thisentry看到该虚拟继承将sizeof(pointer)添加到对象的内存占用中。除此之外,默认情况下仅使用虚拟继承和仅在需要时使用常规继承对我有什么缺点吗?似乎它会导致更多面向future的类设计,但也许我错过了一些陷阱。 最佳答案 缺点是所有类都必须始终初始化其所有虚拟基(例如,如果A是B的虚拟基,并且C派生自B,它还必须初始化A本身)。您必须在使用static_cast的任何地方使用更昂贵的dynamic_cast(可能是问题,也可能不是问题,具体取决于您的系统以及您的设计是否需要它)。仅第1点就不值得,因为您无法隐

c++ - 在 C++ 中,我应该几乎总是使用虚拟继承吗?

我从thisentry看到该虚拟继承将sizeof(pointer)添加到对象的内存占用中。除此之外,默认情况下仅使用虚拟继承和仅在需要时使用常规继承对我有什么缺点吗?似乎它会导致更多面向future的类设计,但也许我错过了一些陷阱。 最佳答案 缺点是所有类都必须始终初始化其所有虚拟基(例如,如果A是B的虚拟基,并且C派生自B,它还必须初始化A本身)。您必须在使用static_cast的任何地方使用更昂贵的dynamic_cast(可能是问题,也可能不是问题,具体取决于您的系统以及您的设计是否需要它)。仅第1点就不值得,因为您无法隐