草庐IT

派生词

全部标签

c++ - 派生类中 protected 成员函数地址不可访问

#includeclassA{protected:voidfoo(){}};classB:publicA{public:voidbar(){std::cout这里我试图获取基类的protected成员函数的地址。我收到此错误。main.cpp:Inmemberfunction‘voidB::bar()’:main.cpp:5:error:‘voidA::foo()’isprotectedmain.cpp:13:error:withinthiscontextmake:***[all]Error1将foo更改为公共(public)工程。打印&B::foo也可以。能否请您解释一下为什么我们无

c++ - CTRP 派生类中没有名为 'type' 的类型

我一直在试验CuriouslyRecurringTemplatePattern对于通用的单参数仿函数,有两种实现:一种使用有效的模板模板参数,另一种我尝试在接口(interface)类中访问派生的Functor::type。在后一个示例中,编译器(gcc5.4.0)报告error:notypenamed'type'in'structCube'templateclassFunctor>classFunctorInterface_1{private:constFunctor&f_cref;public:FunctorInterface_1():f_cref(static_cast&>(*t

c++ - 为什么模板化的派生类可以在 gcc 上访问其基私有(private)成员?

我正在学习C++。现在我明白派生类不能访问其基类的私有(private)成员,但为什么模板化的可以?例如这样的东西很好用:classbase{staticintx;};templateclassderived:publicbase{Tt;public:voidsetx(inti){x=i;}intgetx(){returnx;}};我在Linux上使用gcc5.4。 最佳答案 这是GCC的一个已知错误,它似乎无法在模板中正确执行访问检查。参见Bug58740.不幸的是,它仍然没有修复。顺便说一句:Clang未能按预期编译。

c++ - 如何将派生类的 shared_ptr vector 转换为基类的 shared_ptr vector

classInterface{};classClass:publicInterface{};classFoo{public:std::vector>&GetInterfaces(){return*(std::vector>*)(&m_data);//returnm_data;}private:std::vector>m_data;};这行得通,但又丑又吓人。有更好/更安全的方法吗?我不想做m_data类型std::vector>因为模块Foo完全属于Class作品的,Interface(和Foo::GetInterfaces())被实现为与一个单独的模块交互,该模块应该只知道Inter

c++ - 通过基类虚函数获取派生类型

我试图通过基类虚函数获取对象的派生类型。我写了这个,它不编译:structbase{virtualbase&get_this(){return*this;}};structderived:base{virtualderived&get_this()override{return*this;}voidfn();};intmain(){base*pd=newderived();derived&x=pd->get_this();/*ERROR*/x.fn();return0;}...给我一个错误:我无法从base初始化derived&。由于get_this是虚拟的,为什么pd->get_th

c++ - 在没有动态转换或静态向下转换的情况下比较 C++ 中的派生类

我正在尝试将公共(public)基类的对象放在一起进行比较。在任何情况下,当两个对象在类上不同,或者在特定于对象的值上不同时,比较都应该失败(例如,输出一个失败字符串)。理想情况下,比较是以某种方式强制执行的,这样一个新的派生类也必须为其类的成员编写一个比较函数。这是一个代码示例:#include#include#includeclassVehicle{public:virtualstd::stringcompareTo(Vehicle*v)=0;};classBicycle:publicVehicle{public:Bicycle(){color_="red";}std::strin

c++ - 为什么派生类要继承基类的私有(private)成员?

这个问题在这里已经有了答案:DoSub-ClassesReallyInheritPrivateMemberVariables?(7个答案)关闭5年前。我知道派生类不能访问基类的私有(private)成员,那派生类为什么要继承基类的私有(private)成员呢?有没有用处?谢谢!

c++ - 派生类析构函数如何在以下程序中被调用为私有(private)的?

#includeclassbase{public:virtual~base(){std::cout上面的程序可以正常编译和运行。派生类析构函数如何被调用为私有(private)的? 最佳答案 这不仅会发生在析构函数中。您可以用私有(private)函数覆盖任何虚拟公共(public)函数。#includeclassbase{public:virtualvoidx(){std::coutx();//OK//((derived*)pt)->x();//error:‘virtualvoidderived::x()’isprivateder

c++ - 从 boost::archive::text_oarchive_impl 和 boost::archive::text_iarchive_impl 派生自定义存档类

注意:Boost的存档方案基于对称的输入和输出存档类。一直写这两者很乏味,所以我将使用?archive来表示oarchive和iarchive。总结:将自定义存档的基类从binary_?archive_impl更改为text_?archive_impl后,当编译器实例化时,我的自定义存档类不再“找到”>serialize(...)我的其他类中的方法。背景:我的应用程序使用binary_?archive_impl的子类成功地读取和写入文件到磁盘(文档和/或代码注释建议这优于从binary_?archive派生)。我需要从二进制文件格式切换到文本格式,因此我将自定义存档的基类切换为text

具有嵌套类的 C++ 抽象类。派生类和嵌套类

我的任务是编写自己的容器Linked_list和Array_list。我为他们提供了一个界面:typedefintvalue_type;classContainer{public:classIterator{public:Iterator();Iterator(value_type*other);Iterator(constIterator&other);Iterator&operator=(constIterator&other);...};Container();Container(constContainer&other);~Container();virtualvalue_ty