草庐IT

c++ - 在 C++ 中包含父类对象的子类有什么问题(如果有的话)?

特别是在C++中,但通常也作为OO设计原则,执行以下操作有什么问题吗?它在实践中完成了吗?如果它显示出明显的设计缺陷,那么什么是好的替代方案?有什么优势吗?classProperty{};classCompositeProperty:publicProperty{...private:std::vectorm_properties;};具体来说,派生类可以包含基类对象吗?作为我的背景知识,我已经看到它用于建模/镜像XML结构,但感觉设计在某种程度上违背了is-a-is-inheritance和has-a-is-composition关系,对于这些关系通常努力。

c++ - 在父类中调用父方法并访问私有(private)变量?

我试图让下面的代码工作,但我找不到关于C++如何处理公共(public)继承和私有(private)继承的足够好的文档来让我做我想做的事。如果有人可以解释为什么我不能使用私有(private)继承或Parent::size访问Parent::setSize(int)或Parent::size>使用公共(public)继承。要解决这个问题,我需要在Parent中使用getSize()和setSize()方法吗?classParent{private:intsize;public:voidsetSize(ints);};voidParent::setSize(ints){size=s;}c

spring - 在抽象父类(super class)中注入(inject)spring依赖

我需要使用Spring框架在抽象父类(superclass)中注入(inject)依赖项。classAextendsAbstractClassB{privateXdaodaox;...publicsetXdao(){...}}classAbstractClassB{..privateyDaodaoy;publicseyYdao(){...}}每次实例化抽象类B时,我都需要传递父类(superclass)依赖项(在我的项目中可以以100种方式对其进行子类化)application.xml中的条目(spring上下文文件)如何在application.xml中创建父类(superclass

spring - 在抽象父类(super class)中注入(inject)spring依赖

我需要使用Spring框架在抽象父类(superclass)中注入(inject)依赖项。classAextendsAbstractClassB{privateXdaodaox;...publicsetXdao(){...}}classAbstractClassB{..privateyDaodaoy;publicseyYdao(){...}}每次实例化抽象类B时,我都需要传递父类(superclass)依赖项(在我的项目中可以以100种方式对其进行子类化)application.xml中的条目(spring上下文文件)如何在application.xml中创建父类(superclass

c++ - 派生类的虚表,除了父类虚函数外没有任何虚函数

是否将为派生类创建虚表,派生类除了父类之外没有任何虚函数,一个虚函数不被派生类覆盖。例如:classA{public:virtualvoidshow();};classB:publicA{};B类的虚表怎么样 最佳答案 您的问题没有标准答案。它实际上取决于编译器版本。C++中没有指定标准ABI。如果您对更深入的内容感兴趣,请查看“ItaniumC++ABI”或尝试通过查看汇编代码自行寻找答案。甚至有人提议为C++定义可移植的ABIhttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2

c++ - 多个类的父类的部分特化

我想对模板类使用部分特化,以便该模板类的所有子类都将使用该特化。让我用一个例子来解释它:)templateclassBaseMatrix{...};这个类将有指定矩阵结构的子类,如稀疏、密集、对角线……templateclassDiagonalMatrix:publicBaseMatrix{..}然后这些类将再次有指定存储的子类:堆栈数组、vector、列表、队列......templateclassStackDiagonalMatrix:publicDiagonalMatrix{..}还有一个Matrix类,它提供了所有的数学功能。该模板类实现了operator+、operator-

c++ - 从 vector C++ 中的父类(super class)调用子类方法

我正在尝试将一些子类元素添加到一个vector中,遍历它们调用一个被覆盖的方法,并希望它在可能的情况下调用被覆盖的方法。但是我发现它似乎只调用父类(superclass)方法。我学过Java,但不确定为什么要在C++中这样做。我尝试使用父类(superclass)的指针vector重写代码并将子类的指针转换到父类(superclass)。然后通过指针访问它。理想情况下,我不想将指针列表放入vector中,因为我必须手动删除每个指针(我相信?)以阻止内存泄漏,因为我将使用new创建对象,以便它们持续到方法调用以将它们添加到vector中。有没有更好的方法来做到这一点,或者我是否坚持使用指

c++ - 由于父类(super class)(按值传递)导致的重载构造函数调用不明确

我围绕GSL的某些部分编写了一些C++包装器并遇到了以下难题(对我来说)。代码(精简到最基本的部分)如下:#includestructgsl_vector_view{};classVector:protectedgsl_vector_view{public:Vector(constVector&original);Vector(constgsl_vector_viewview);};classAutoVector:publicVector{public:explicitAutoVector(constsize_tdims);};voiduseVector(constVectorb){}

c++ - 将子类对象传递给采用父类(super class)对象的函数

假设以下代码:classEvent{public:virtualvoidexecute(){std::cout执行时,程序输出“Eventexecuted.”,但我想执行SubEvent。我该怎么做? 最佳答案 您正在按值传递Event。该函数获取自己的参数拷贝,这是一个Event对象,而不是SubEvent。您可以通过传递引用来解决此问题:voidexecuteEvent(Event&e){//^e.execute();}这叫做objectslicing.这相当于:SubEventse;Evente{se};e.execute()

c++ - 成员空间可以访问父类的私有(private)成员

我一直在阅读thisarticle,当我注意到这个片段中的一些让我感到惊讶的东西时,我正在玩弄成员空间习语一段时间(编译没有问题:http://ideone.com/hRiV5B):classHugeClass{public:structmemberspace{intf()const{returnparent.f;}private:friendHugeClass;explicitmemberspace(HugeClass&parent):parent(parent){}HugeClass&parent;}memberspace;HugeClass():memberspace(*this