草庐IT

派生词

全部标签

c++ - 将派生类的 unique_ptr 添加到基类 unique_ptr 的 vector 中

关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭6年前。Improvethisquestion我有一个std::unique_ptr我想添加到std::vector>.std::unique_ptrderivedObject;std::vector>vec;vec.push_back(derivedObject)//Invalidarguments

c++ - 限制对C++中纯虚函数的派生类的访问

classA{public:voidvirtualmagic()=0;voidbar(){magic();//thisshouldbelegal}};classB:publicA{public:voidmagic(){cout因此B的纯虚拟基类A应该可以访问magic(),但不能访问任何派生类CB的。这可以使用访问说明符和/或friend声明或任何其他方式来实现吗? 最佳答案 基本上,您不能减少虚方法的可见性。一旦它在A中公开,就没有整洁的方法使其在任何派生类中protected或私有(private)。

c++ - 如何继承成员函数以便它始终返回对派生实例的引用?

我正在开发一个迭代器系列,其中所有迭代器类X都有X&operator++(){++x;返回*this},所以将它放在一个公共(public)基类中似乎是个好主意。不幸的是,返回类型发生了变化,因为它应该始终返回对派生类的引用。下面说明了这个问题。我想让f()工作,但我能想出的唯一解决方法是g()和h(),它们是不满意:structA{A&f(){return*this;}templateT&g(){return*(T*)this;}templateT&h(T&unused){return*(T*)this;}};structB:A{intx;B(intx):x(x){}};intmai

c++ - 派生类不从基类继承重载方法

我想让基类中的方法调用将在派生类中实现的纯虚方法。但是,基类的无参数方法似乎并没有被派生类继承。我究竟做错了什么?编译器是MSVC12。errorC2660:'Derived::load':functiondoesnottake0arguments这是一个完整的示例(由于错误而无法编译):structBase{voidload(){load(42);};//Makingthisvirtualdoesn'tmatter.virtualvoidload(inti)=0;};structDerived:Base{virtualvoidload(inti){};};intmain(){Deri

C++11 在派生类中删除了析构函数

classB{inti;public:B(intparam):i(param){}~B()=delete;};classD:publicB{inti2;public:D(intp1,intp2):B(p1),i2(p2){}~D()=delete;};intmain(){B*instance=newD(1,2);return0;}cl测试.cpp:Microsoft(R)C/C++OptimizingCompilerVersion18.00.31101forx86Copyright(C)MicrosoftCorporation.Allrightsreserved.test.cpptes

c++ - 将派生类的指针数组转换为基类指针数组

考虑这样的继承层次结构:一种/\B1B2\/C|丁像这样在C++中实现:classA{public:A(){};virtual~A()=0;doublea;};A::~A(){};classB1:virtualpublicA{public:B1(){}virtual~B1(){}doubleb1;};classB2:virtualpublicA{public:B2(){}virtual~B2(){}doubleb2;};classC:publicB1,publicB2{public:C(){}virtual~C(){}doublec;};classD:publicC{public:D(

c++ - 为什么在 C++ 中将派生类对象传递给具有基类参数的函数时应该传递引用而不是值?

如果我没记错的话,在Java中,我们可以将子类传递给具有父类(superclass)的函数。代码如下所示。//Assumetheclasseswerealreadydefined,andApple//andPineapplearederivedfromFruit.Fruitapple=newApple();Fruitpineapple=newPineapple();publicvoidiHaveAPenIHaveAn(Fruitfruit){...}//:)...publicstaticvoidmain(String[]arg){iHaveAPenIHaveAn(apple);//Uh

c++ - 如果抽象基类是一个接口(interface),是否必须在派生类构造函数中调用基类构造函数?

classAbstractQuery{virtualboolisCanBeExecuted()=0;public:AbstractQuery(){}virtualboolExecute()=0;};classDropTableQuery:publicAbstractQuery{vector>QueryContent;QueryValidateqv;public:explicitDropTableQuery(conststring&qr):AbstractQuery(),qv(qr){}boolExecute();};派生类构造函数中是否需要调用基类构造函数?

c++ - 为什么我必须在 Visual C++ 的派生类声明中指定纯虚函数?

给定基类A和派生类B:classA{public:virtualvoidf()=0;};classB:publicA{public:voidg();};voidB::g(){cout我在尝试定义voidB::f()时收到错误消息,指出f()未在B中声明。我必须在B中明确声明f()吗?我认为如果接口(interface)发生变化,我不必更正从它派生的每个类中的声明。B没有办法自动从A获取所有虚函数的声明吗?编辑:我发现一篇文章说纯虚函数的继承依赖于编译器:http://www.objectmentor.com/resources/articles/abcpvf.pdf我正在使用VC++2

c++ - 一个关于派生标准异常类的问题

/*user-definedexceptionclassderivedfromastandardclassforexceptions*/classMyProblem:publicstd::exception{public:...MyProblem(...){//specialconstructor}virtualconstchar*what()constthrow(){//what()function...}};...voidf(){...//createanexceptionobjectandthrowitthrowMyProblem(...);...}我的问题是为什么what()之