草庐IT

C++基本多态性

全部标签

c++ - 如何在 gSOAP 中绑定(bind)多态类型

我正在尝试做的事情,利用gSOAP:在XML模式中定义数据结构使用wsdl2h和soapcpp2生成表示这些结构的C++类从C++读取和写入XML中的这些结构请注意,此时我没有使用Web服务,我只对XML数据绑定(bind)感兴趣。如果我的类(class)是这样的:类基础{...Der1类:公共(public)基础{..Der2类:公共(public)基础{...然后我可以使用以下方法序列化一个Base对象(它实际上可能是派生类型之一):std::ofstreammyFile;myFile.open("output.out");ctx.os=&myFile;Der1obj;//orDe

c++ - C++11 theads 的最基本并行化失败

我尝试通过g++4.7使用C++11theading库。首先我有一个问题:是否预计下一个版本不需要手动链接pthread库?所以我的程序是:#include#include#includevoidf(inti){std::coutt;for(inti=0;i我编译:g++-4.7-Wall-Wextra-Winline-std=c++0x-pthread-O3helloworld.cpp-ohelloworld它返回:Helloworldfrom:Helloworldfrom:Helloworldfrom:322purevirtualmethodcalledterminatecalle

c++ - 多态性是如何在像 c++ 这样的语言中在低层次上实现的?

这个问题在这里已经有了答案:Alternativevirtualfunctioncallsimplementations?(11个答案)关闭9年前。我在一本书中读到,多态性是通过三级指针(使用vtable)在c++中实现的,但是在c++中还有其他实现它的方法吗。

c++ - 使用 HttpSendRequest 强制进行基本身份验证?

在连接到REST服务时,使用InternetSetOption设置用户名和密码。我注意到当我调用HttpSentRequest时WinInet不发送Authorizationheader,即使我先调用了InternetSetOption。您必须首先使用WWW-Authenicationheader从服务器获得响应,这似乎很荒谬。这会在每次请求时向服务器创建一个完整的额外请求。是否有WinInet调用在第一次调用时强制授权header,还是我必须手动添加它? 最佳答案 在HttpSendRequestW之前调用函数InternetSe

c++ - 如何检测一个类是否被多态使用?

假设在一个旧项目(>1M行)中,有一个名为Base的类,它有两个虚函数foo和barclassBase{public:virtualvoidfoo();virtualvoidbar();};classDerived:publicBase{public:virtualvoidfoo();virtualvoidbar();};我怀疑Base没有被多态使用,所以foo/bar不应该是虚拟的。为了证实我的想法,我需要找出是否有这样的说法:Base*b=newDerived;但是如果我们在一个函数之间传递指针,就很难找到了,例如:Base*f(){...Derived*d=/*...*/;...

c++ - C++ switch 仅适用于整数类型的基本原理是什么?

这个问题在这里已经有了答案:Whycan'ttheswitchstatementbeappliedtostrings?(22个答案)关闭7年前。我觉得C++应该允许switch()处理任何可以比较的类型,而不仅仅是整数类型。这似乎很奇怪:switch(myEnum){casemyEnumValue1:...break;casemyEnumValue1:...break;}在语义上等同于:if(myEnum==myEnumValue1)...elseif(myEnum==myEnumValue2)...但这只适用于整数类型。为什么?这样限制的目的是什么?我知道编译器为switch生成的代

c++ - 保留基本功能的重载赋值运算符

是否可以在不完全重新实现的情况下重载=运算符?我想为它指定特殊的行为-如果输入对象有一些特殊的值->运算符应该做一些额外的工作。如果不是-它应该作为基本赋值运算符。有点像operator=(input)if(input==specialValue)setParam(this->true)base() 最佳答案 您可以使用ifelse语句来实现,在else部分指定基本功能,在if或elseif部分指定您的条件,如果条件为真,则根据该值执行您的操作返回一些特定值。operator=(input)if(input==specialValu

c++ - 在特定位置分配多态类成员?

我有一个包含几个类成员和一个多态成员的类:classContainer{Container::Container(){p=newDerived();}Poly*p;Aa;Bb;};我想为Container::p指向的实际多态对象分配内存,在Container::b之后连续分配,而不是通过默认的new()和因此malloc()。实现此目标的最佳方法是什么? 最佳答案 在某种程度上,细节取决于Container构造函数如何决定Poly的具体类型。据推测,这种选择可能会有所不同。否则,只需在b之后声明一个Derived成员即可。但是假设这

C++ 接口(interface)、继承、多态性

想象一下这个场景:接口(interface)I1:m1(),由C1类实现接口(interface)I2:m2(),由C2类实现接口(interface)I3:m3(),由C3类实现我想定义接受参数arg的函数。voidf1(I1arg){usem1()}voidf2([I1,I2]arg){usem1()andm2()}voidf3([I2,I3]arg){usem2()andm3()}然后我要定义:一个“union”接口(interface)I123,它具有所有方法,由C123实现一个“union”类C123,它继承现有类C1、C2、C3的实现方法。然后我想实例化C123并将其与f1

c++ - 在 friend 类模板的基本子句中访问私有(private)定义

在C++中,使类模板B的基类规范依赖于与类模板是friend的类A的私有(private)定义是否合法>B?示例代码:structEmpty{};templatestructB;structA{friendstructB;private:usingBase=Empty;};templatestructB:T::Base{};intmain(){Btest;return0;}Godbolt链接:https://godbolt.org/g/HFKaTQ代码在Clang主干(和旧版本)和MSVC19(VS2017)上编译良好,但在GCC主干(和旧版本)上编译失败:test.cpp:Inins