草庐IT

c++ - c++调用基类的ostream友元函数

所以,我有两个类:classBase{private:intnumber;public:friendostream&operator我的问题是,如何从子类中调用基类的友元函数输出其内容:output提前致谢:) 最佳答案 output(n) 关于c++-c++调用基类的ostream友元函数,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/10367271/

C++ - 基类和私有(private)头文件

我正在用C++编写一个库,并且有一个像这样的类层次结构:message.h文件(在./mylib/src中)classMessage{};request.h文件(在./mylib/include/mylib中)#include"message.h"classRequest:publicMessage{};response.h文件(在./mylib/include/mylib中)#include"message.h"classResponse:publicMessage{};我希望对用户隐藏mylib/src文件夹中的所有内容,并且只想分发mylib/include中的文件。但问题是re

c++ - 基类中的私有(private)成员和公共(public)成员有什么区别?

#pragmapack(push,4)classFather{public:intb;charc;};classChild:publicFather{chare;};#pragmapack(pop)sizeof(父亲)=8sizeof(child)=12但是如果我们像这样改变父类:classFather{private://changefrompublicintb;charc;};sizeof(child)=8 最佳答案 它是编译器的一个实现细节。换句话说,这不是你的事,除非你真的、真的需要让你的数据尽可能小。请注意此处的过早优化。

c++ - swig 对基类 'std::string' 一无所知,忽略

我正在尝试使用swig围绕C++库构建ruby​​包装器。其中大部分似乎都有效,但我有一个问题,我很确定与上述警告有关。看起来我正在包装的类之一是从std::string继承的。我在运行swig时看到上面的警告消息。当我在应该返回字符串的ruby​​对象上调用方法时,我看到了这个SWIG::Type_p_std__string:0x.....我在想我需要解决上面的警告,让它起作用,有什么想法吗? 最佳答案 SWIG提示它不知道std::string类,因此无法为其生成代码。SWIG库std_string.i具有用于将C++字符串映射

c++ - 我可以使用类级别的 typedef 作为基类的模板参数吗?

假设一个模板化的基类:templateclassBaseClass;在其他类中,我想从中继承,其中T是一个相当复杂的类型,所以我想使用typedef。因为我不想污染命名空间,所以我希望在类定义中包含typedef:classChildClass:publicBaseClass{typedefMyVeryVeryComplicatedTypeLocalType;...}现在当然我还不能使用LocalType作为BaseClass的模板参数并且必须写两次复杂的定义(MyVeryVeryComplicatedType)。(所以我猜标题问题的答案是“否”。)问题:有没有办法只定义一次,但仍然只

c++ - 在 C++ 中,是否允许将函数指针转换为一个函数指针,该函数指针作为参数获取一个指向基类或派生类的指针?

以下是否会按预期工作?structA{};structB:publicA{intx;};voidf(B*o){std::coutx(f)(&b);} 最佳答案 强制转换后使用此类指针的未定义行为:Anypointertofunctioncanbeconvertedtoapointertoadifferentfunctiontype.Callingthefunctionthroughapointertoadifferentfunctiontypeisundefined,butconvertingsuchpointerbacktopoi

c++ - 从基类解析 C++ 虚函数

抱歉,如果这是一个骗局,我找不到非常正确的答案。我想从基类成员调用函数,并将其解析为子类版本。我以为将其声明为virtual就可以了,但事实并非如此。这是我的方法:classGUIWindow{public:GUIWindow(){SetupCallbacks();}virtualvoidSetupCallbacks(){//Thisfunctionalwayscalled}};classGUIListbox:publicGUIWindow{public:voidSetupCallbacks(){//Thisnevercalled}};GUIListboxlb;//GUIWindow:

c++ - 当基类和派生类都继承自 boost::enable_shared_from_this 时出现错误的弱指针

我有一个派生自boost::enable_shared_from_this的基类,然后是另一个派生自基类和boost::enable_shared_from_this的类:#include#includeusingnamespaceboost;classA:publicenable_shared_from_this{};classB:publicA,publicenable_shared_from_this{public:usingenable_shared_from_this::shared_from_this;};intmain(){shared_ptrb=shared_ptr(n

c++ - 有错误的引用变量,必须在构造函数基类/成员初始化器中初始化

当我尝试编译下面的源代码时出现以下错误。任何人都可以描述为什么存在此错误以及我该如何解决它?Error1errorC2758:'A::s_':mustbeinitializedinconstructorbase/memberinitializer#include#includeusingnamespacestd;classA{public:A(string&s):s_(s){cout 最佳答案 首先,您的A::s_是对std::string的引用;这意味着它引用的是某处必须存在的东西。由于他的引用类型,以及引用必须在创建时初始化的事

c++ - 根据参数在基类中创建派生类

我的问题或多或少与Needadesignpatterntoremoveenumsandswitchstatementinobjectcreation中的问题相同但是,我认为抽象工厂模式不适合这里。我目前正在计划重构/重新实现一些现有的DAL/ORM混合库。在现有代码的某处,有如下所示的代码:classBase{staticBase*create(structDatabasevaluesdbValues){switch(dbValues.ObjectType){casetypeA:returnnewDerivedA(dbValues);break;casetypeB:returnnewD