草庐IT

多重背包

全部标签

c++多重继承 - 编译器修改我的指针

如果我运行以下代码,我会打印出不同的地址。为什么?classBase1{intx;};classBase2{inty;};classDerived:publicBase1,publicBase2{};unionU{Base2*b;Derived*d;U(Base2*b2):b(b){}};intmain(){Derived*d=newDerived;cout更有趣的是,如果你反复进出union,地址会一直递增4,就像这样intmain(){Derived*d=newDerived;cout如果union这样修改,那么问题就解决了unionU{void*v;Base2*b;Derived

c++ - 如何使用多重继承执行转换

我的类结构是这样的:classMethodHelper:publicQObject,publicIMethodHelper{public://Stuff};现在,我得到一个指向该对象的指针:QObject*someObject=getMethodHelper();在这里,我非常确定someObject是一种MethodHelper。我不知何故想将它转换到IMethodHelper。我该怎么办?我目前的想法是QObject->MethodHelper->IMethodHelper,比如:QObject*someObject=getMethodHelper();MethodHelper*m

C++ 多重继承和虚表

所以回到基础知识,我试图将我的头脑围绕在vtables和诸如此类的事情上。在下面的示例中,如果我要将B*传递给某个函数,该函数如何知道调用C对象的vtable中的方法而不是A的vtable中的方法?是否有两个单独的VTable传递给该对象?接口(interface)指针真的只是vtables(因为接口(interface),IIRC,不能包含属性声明)?我想说的是,在我实际尝试这段代码之前,我假设你不能一次继承多个接口(interface)/类(而且所有的接口(interface)都必须可以说是线性的)以便vtable建立在自身之上。如果我对vtables如何工作的想法是正确的(我现在

c++ - 基于标志的多重继承

我有几个类,比如A,B,和C,和相应的标志HAS_A=1,HAS_B=2,和HAS_C=4.是否可以编写一个类,使其父类(来自A、B和C)由这些标志的组合决定?例子:ParentsFromFlagsx;//xendsuphavingthefeaturesofAandC我知道我可以有可变的多个parent,但我喜欢这个因为我想确保如果A,B,和C是类(class)的parent,他们总是会以一定的顺序出现。 最佳答案 这样做是为了在层次结构中引入一些额外的类......enumParentFlags{HAS_A=1,HAS_B=2,H

c++ - c++ 中的多重定义错误和解决此问题的解决方案

我是C++新手。我对C++中的多重定义错误有一些疑问。假设我在一个程序中有3个文件。一个头文件和2个.cpp文件。我已将头文件包含在两个.cpp文件中。我已经在头文件中声明了一个类,并以完全相同的方式在每个.cpp文件中定义了该类。那么这种实现方式会不会导致多重定义错误呢?如果是这样,是不是因为它有两份类定义,而编译器不知道在链接两个.o文件时使用哪一份?我们可以通过在头文件中使用extern并只在其中一个文件中定义类来解决这个问题吗?如果我们可以使用这种方法解决问题,我们是否必须包含.cpp(带有类定义)到其他.cpp文件(没有类定义)?我已经在头文件中声明并定义了一个类。这个cas

c++ - C++ 中的多重继承导致难以覆盖通用功能

在C++物理模拟中,我有一个名为Circle和Square的类。这些是形状,并有一个名为push()的方法,该方法对其施加力。然后有一个Circle的特例,称之为SpecialCircle,其中push()应该表现出稍微不同的属性。但实际上,还有SpecialSquare()应该表现出相同的力属性。所以我想要一个名为Shape的抽象基类来处理圆和正方形,但我也想要一个名为Special的抽象基类,它将特殊属性应用于force()。设计此类结构的最佳方式是什么?到目前为止,我有:classShape{virtualvoidpush();};classCircle:publicShape{

c++ - std::string 和多重连接

让我们考虑该片段,并假设a、b、c和d是非空字符串。std::stringa,b,c,d;d=a+b+c;当计算这3个std::string实例的总和时,标准库实现创建第一个临时std::string对象,在其内部缓冲区中复制a和b的连接缓冲区,然后在临时字符串和c之间执行相同的操作。一位程序员同事强调,operator+(std::string,std::string)可以定义为返回一个std::string_helper而不是这种行为.这个对象的真正作用是将实际的连接推迟到它被转换为std::string的那一刻。显然,operator+(std::string_helper,st

c++ - 重量总和约为 10^9 的背包

几周前我在一次编程竞赛中遇到了一个问题,这个问题可以归结为背包0/1问题。但我做不到,因为最大权重大约是10^9,所以在C++中我不能使用数组。尽管项目数量约为10^5。解决这个问题的一种方法,我能想到的是使用STL映射,但不确定该怎么做。如有任何帮助,我们将不胜感激。谢谢。 最佳答案 如果您只需要一个巨大的数组,为什么不将它分解成更小的数组呢?classHuge_array{public:Huge_array(size_tmax_size):max_size(max_size),store(max_size/v_size,vect

具有多重继承的 C++ 构造函数重载解决方案

我有一小段代码,我想获得更多信息,了解为什么重载解析会选择一个构造函数而不是另一个构造函数。这是有问题的代码:#includestructBase{};structOther{Other(constOther&){std::cout我假设C++标准中有一个部分将复制构造函数定义为比用户定义的构造函数更好的匹配*?否则我的假设是,如果不存在有利于复制构造函数的规则,那么编译器将按照继承顺序(与多重继承的构造顺序一样)或者只是给我一个模糊的构造函数调用错误。然而,颠倒Derived从Base和Other继承的顺序不会改变输出,这让我相信我最初的猜测关于复制构造函数受到青睐是正确的。谁能指出

c++ - 多重继承虚拟调用歧义

手头的问题很难描述,所以代码放在前面以便更清楚。structBase{intb;virtualvoidfoo(){cout假设在一些奇怪的情况下,我想要一个基类MultiInheritance有两个基类Derived1和Derived2公共(public)非虚拟基类Base。MultiInheritance中有两个Base,如何在MultiInheritance中指定要访问哪个Base类>?上面的代码似乎通过多次强制转换可以正常工作,但我不确定这是否是已定义的行为。如果是,编译器如何实现它来满足多态性的需要?一方面,virtual调用都应该产生相同的virtual函数表,但另一方面,如