草庐IT

c++ - 层次结构中的所有派生类都需要访问虚拟基类吗?

当我尝试编译以下代码时:classA{public:A(intv):virt(v){}intvirt;intgetVirt(void)const{returnvirt;}};classB:privatevirtualA{protected:B(intv):A(v){}usingA::getVirt;};classC:publicB,privatevirtualA{protected:C(intv):A(v),B(v){}usingA::getVirt;};classD:publicC{public:D(void):C(3){}usingC::getVirt;};#includeintm

基类的c++模板特化

我想要一个用于BASECLASS和所有派生类的特殊格式化程序。我有以下类(class):structBASECLASS{...};structSPECIALFORMAT:BASECLASS{...}structANOTHERSPECIALFORMAT:BASECLASS{...}templatestructLISTFORMATTER{listl;boolformat(){};}boolLISTFORMATTER::format(){...}LISTFORMATTERbcFt;LISTFORMATTERspFt;LISTFORMATTERaspFt;bcFt.format();//如何为

c++ - 使用和重载基类的模板成员函数?

在下面,structY重载了X的成员函数f。两个重载都是模板函数,但采用不同的参数(typename和int),需要明确指定:structX{templatestaticboolf(){returntrue;}};structY:publicX{usingX::f;templatestaticboolf(){returnfalse;}};intmain(){std::cout()()这会按预期使用gcc打印10。然而,clang(3.3)提示说[...]error:nomatchingfunctionforcallto'f'std::cout()()staticboolf(){retu

c++ - 指向具有 protected 继承的基类方法的指针

我有这个代码:classFoo{public:intx=4;int&operator[](size_tindex){returnx;}};classBar:protectedFoo{public:usingFoo::operator[];Bar(){x++;}};intmain(intagrc,char**argv){typedefint&(Bar::*getOp)(size_tindex);Barb;autobVal=b[4];getOpo=&Bar::operator[];autobVal2=(b.*o)(7);}但是,我不能编译它,因为errorC2247:'Foo'notacc

c++ - 基类的多重虚继承和构造函数调用

有这段代码:#includeclassBazowa{intx;public:Bazowa():x(55){}Bazowa(intx_):x(x_){}voidfun(){std::cout执行此程序后,它将打印“55fun”。类Pochodna1和Pochodna2中的构造函数调用发生了什么——它们被忽略了吗?为什么Bazowa类的成员'x'设置为'55',而不是'101'或'103'? 最佳答案 虚基构造函数总是从最终叶类中调用。没有调用虚拟基的其他构造函数。在您的情况下,SuperPochodna()正在调用Bazowa()并在

c++ - 从派生调用时编译器找不到基类方法,并且派生定义了具有附加参数的相同命名方法

这是一个带有简单代码粘贴的ideone链接:http://ideone.com/BBcK3B.基类有一个无参函数,而派生类有一个带参数的函数。一切都是公开的。为什么从B的实例调用时编译器找不到A::foo()?代码:#includeusingnamespacestd;classA{public:virtualvoidfoo(){cout编译错误:prog.cpp:Infunction‘intmain()’:prog.cpp:25:11:error:nomatchingfunctionforcallto‘B::foo()’b.foo();^prog.cpp:25:11:note:cand

c++ - 意外地能够从基类ctor调用派生类虚函数

任何人都可以帮助解释这种意外行为吗?前提我创建了包含成员std::thread变量的Thread类。Thread的构造函数构造成员std::thread,提供指向调用纯虚函数(由基类实现)的静态函数的指针。代码#include#include#includenamespace{classThread{public:Thread():mThread(ThreadStart,this){std::coutRun();}voidjoin(){mThread.join();}virtualvoidRun()=0;protected:std::threadmThread;};classVerbo

C++:在基类的成员函数中复制对象数据

假设我有两个类A和B。B派生自A。A没有数据成员,但是B有两个整数成员。如果我在类A中定义一个方法,如下所示:voidCopyFrom(constA*other){*this=*other;}然后在子类中调用它,整数数据成员会被复制吗? 最佳答案 没有。这被称为slicingproblem.即使在A和B中重载operator=也是如此:*this=*other只会解析为A::operator=(constA&)或B::operator=(constA&)被调用。 关于C++:在基类的成员

c++ - 用子类对象初始化的多态基类对象数组

抱歉,标题太复杂了。我有这样的东西:classBase{public:intSomeMember;Base():SomeMember(42){}virtualintGet(){returnSomeMember;}};classChildA:publicBase{public:virtualintGet(){returnSomeMember*2;}};classChildB:publicBase{public:virtualintGet(){returnSomeMember/2;}};classChildC:publicBase{public:virtualintGet(){return

c++ - 有 friend 看基类吗?

给定示例代码:classBase{public:boolpub;protected:boolprot;};classDerived:privateBase{friendclassMyFriend;};classMyFriend{Derived_derived;voidtest(){//Doesstandardprovidemeaccessto_derived.puband_derived.prot?cout作为好友,我是否可以像我作为好友的类中的成员函数一样获得所有访问权限?换句话说,因为我是friend,我可以获取私有(private)继承的基类的protected成员和公共(pub