草庐IT

多重背包

全部标签

c++ - 遵守标准有多重要?

对于像C++这样的语言,标准的存在是必须的。优秀的编译器会尽最大努力(好吧,至少是大多数优秀的编译器)来遵守。许多编译器都有语言扩展,其中有些是标准允许的,有些则不是。后一种2个示例:gcc的类型Microsoft的编译器允许纯虚函数声明同时具有纯说明符(=0)和定义(这是标准禁止的-让我们不讨论为什么,那是另一个话题:)(还有很多其他的例子)这两个示例在以下意义上都很有用:example1是一个非常有用的功能,将在c++0x中以不同的名称提供。example2也有用,微软已经决定不尊重毫无意义的禁令。我很感激编译器提供了语言扩展来帮助我们的开发人员完成日常工作。但这里有一个问题:不应

c++ - 多重继承情况下的销毁顺序

在多重继承的情况下,销毁顺序是否明确定义?structA{~A(){std::cout对于我的编译器打印的给定代码:ABBA但是我使用了更复杂的构造(包括CWinApp),我得到了不同的结果。那么顺序是否明确?如果是这样,排序规则是什么? 最佳答案 来自[class.dtor]:Basesandmembersaredestroyedinthereverseorderofthecompletionoftheirconstructor(see12.6.2).构造函数顺序,来自[class.base.init]:Inanon-delega

c++ - c++中没有虚函数的多重继承

我遇到了菱形继承(钻石问题),并针对同一颗钻石的不同情况找到了不同的解决方案。但是我找不到“链式”钻石的解决方案。根据结构:是的,我想每次都有多个基类,所以虚拟继承不是一个解决方案(那它甚至被称为diamond吗?)。我还想避免为钻石的每个中间层使用get/set函数。pp||kk\/sclassparent{intval;};classkid1:publicparent{};classkid2:publicparent{};classschool:publickid1,publickid2{};在父类中访问val现在如下所示:school*s=newschool;s->kid1::v

c++ - C++多重继承中构造函数中调用基成员

假设我有这两个类classbase_size{public:intsize(){return5;}};classbase_implement{public:base_implement(ints):_vec(s){cout_vec;};如果我要继承这两个类,在另一个类的构造函数中调用其中一个类的成员函数是否可以?例如classderived:publicbase_implement,publicbase_size{public:derived():base_size(),base_implement(size()){//IsthisOK?//Ifderivedisnotyetconst

c++ - Qt/C++中多重继承的正确方式是什么?

在我的Qt应用程序中,我有一个基类如下。我正在使用QObject,因为我想在所有派生类中使用Signal-Slot机制。classIRzPlugin:publicQObject{public:virtualvoidregisterMenu(QWidget*);virtualvoidexecute();}然后我有另一个类如下。我需要从QWidget进行扩展,因为我需要在所有派生类中实现事件处理方法(例如mouseMoveEvent()、keyPressEvent()和其他)。classIRzLayeringPlugin:publicIRzPlugin,publicQWidget{}但是编

c++ - 链接静态库时内联函数的多重定义

我有一个用mingw(Windows的gcc)编译的C++程序。使用包含gcc4.4.1的mingw的TDM版本。可执行文件链接到两个静态库(.a)文件:其中一个是用C编写的第三方库;另一个是我编写的C++库,它使用C库在顶部提供我自己的C++API。C库功能的一部分(在我看来,过多)是在内联函数中实现的。当您使用C库的API时,您无法避免包含内联函数,但是当我尝试将它们全部链接在一起时,我收到链接错误,指出所有内联函数都有多个定义-我都有在我的C++包装器库和我没有调用过的包装器库中调用,基本上在header中内联定义的任何内容都已在C库和C++库中为其创建了一个函数。在同一个项目的

c++ - 多重继承和多态问题

考虑这个C++代码:#includeusingnamespacestd;structB{virtualintf(){return1;}intg(){return2;}};structD1:publicB{//(*)intg(){return3;}};structD2:publicB{//(*)virtualintf(){return4;}};structM:publicD1,publicD2{intg(){return5;}};intmain(){Mm;D1*d1=&m;coutf()(m).g()(d1)->g()它打印1225.如果我们进行虚拟继承,即添加virtual之前publ

c++ - [] 运算符和多重继承的歧义

这个问题在这里已经有了答案:Whydomultiple-inheritedfunctionswithsamenamebutdifferentsignaturesnotgettreatedasoverloadedfunctions?(3个答案)关闭9年前。考虑以下类:classFoo{public:voidoperator[](conststd::string&s){}voidoperator[](std::size_tidx){}};在这里,给定一个Foof的实例,表达式f[0]没有歧义,因为编译器选择了第二个重载。同样,表达式f["abc"]也没有歧义,因为编译器会选择第一个重载(因

c++ - C++中多重继承的限制

C++中多重继承的限制是什么?即,一个类可以继承多少个类?它是依赖于实现还是对在多重继承中可以继承的类的数量有限制? 最佳答案 它是实现定义的。C++11在标准的实现数量部分给出了推荐的最小值:—Directandindirectbaseclasses[16384].—Directbaseclassesforasingleclass[1024].[...]—Directandindirectvirtualbasesofaclass[1024].我会说这非常慷慨。 关于c++-C++中多重

c++ - 没有虚拟继承的多重继承

我试图理解多重继承,这是我的代码:structA{A(){}staticintn;staticintincrement(){return++n;}};intA::n=0;structB:publicA{};structC:publicA{};structD:publicB,C{};intmain(){Dd;cout此代码有效。但是,如果我将increment()更改为非静态,它将失败。我的问题:为什么编译器提示非静态版本的increment()的调用不明确,而静态版本却满足?如果我向B或C添加另一个increment()函数,编译器也会报错,甚至声明为静态的。为什么?