草庐IT

多重性

全部标签

c++ - 具有多重继承的协变返回类型。这段代码是如何工作的?

谁能告诉我返回类型协变在以下代码中是如何工作的?classX{public:intx;};classY:publicOtherClass,publicX{};staticYinst;classA{public:virtualX*out()=0;};classB:publicA{public:virtualY*out(){return&inst;}};voidmain(){Bb;A*a=&b;//xandyhavedifferentaddresses.howandwhenisthisconversiondone??Y*y=b.out();X*x=a->out();}编辑:对不起,我一定不

c++ - 多重继承 : 2Classes1Method

我刚刚试过这段代码:structFaceOfPast{virtualvoidSmile()=0;};structFaceOfFuture{virtualvoidSmile()=0;};structJanus:publicFaceOfPast,publicFaceOfFuture{virtualvoidSmile(){printf(":)");}};...voidmain(){Janus*j=newJanus();FaceOfFuture*future=j;FaceOfPast*past=j;future->Smile();past->Smile();deletej;}它按预期工作(输出

c++ - 为什么在头文件中定义类不会出现多重定义错误?

我不确定我问的问题是否正确,但让我解释一下。首先,我阅读了这篇解释声明和定义之间区别的文章:http://www.cprogramming.com/declare_vs_define.html其次,我从之前的研究中了解到,在头文件中定义变量和函数是一种不好的做法,因为在链接阶段,您可能对同一个名称有多个定义,这会引发错误。但是,为什么类不会发生这种情况?根据另一个SO答案(Whatisthedifferencebetweenadefinitionandadeclaration?),以下将是一个类定义:classMyClass{private:public:};如果上面的定义在一个头文件

c++ - 模版类的多重继承不明确

我有一个真实的情况,可以用下面的例子来概括:templatestructNotifier{voidadd_listener(ListenerType&){}};structTimeListener{};structSpaceListener{};structA:publicNotifier,publicNotifier{};structB:TimeListener{};intmain(){Aa;Bb;a.add_listener(b);//whyisambiguous?return0;}为什么B对编译器来说并不明显?是TimeListener,因此唯一可能的重载解决方案是Notifie

C++ 纯虚多重继承?

我需要有关使用接口(interface)的多重继承的实现的帮助...有一个现有的代码和一个具有很多功能的接口(interface)。这些实例是使用工厂创建的。classIBig{//Lotofpurevirtualfunctions};他的实现:classCBig:publicIBig{//Implementation}我想将界面拆分为多个较小的界面,但它应该在一段时间内与现有代码保持兼容。这是我尝试做的示例:classIBaseA{public:virtualvoidDoA()=0;};classIBaseB{public:virtualvoidDoB()=0;};//Thesame

c++ - 静态成员的多重定义?

以下两个文件无法链接,当我删除“static”关键字时,就可以了。用g++测试。用readelf检查目标文件,静态成员似乎被导出为全局对象符号......我认为它应该是一个本地对象......?静态1.cppclassStaticClass{public:voidsetMemberA(intm){a=m;}intgetMemberA()const{returna;}private:staticinta;};intStaticClass::a=0;voidfirst(){StaticClassstatc1;static1.setMemberA(2);}静态2.cppclassStatic

c++ - C++ 中的多重间接寻址有什么用?

在什么情况下您可能希望在C++中使用多重间接寻址(即Foo**中的指针链)? 最佳答案 正如@aku指出的,最常见的用法是允许在函数返回后对指针参数的更改可见。#includeusingnamespacestd;structFoo{inta;};voidCreateFoo(Foo**p){*p=newFoo();(*p)->a=12;}intmain(intargc,char*argv[]){Foo*p=NULL;CreateFoo(&p);couta这将打印12但还有其他一些有用的用法,如以下示例所示,用于迭代字符串数组并将它们打

c++ - 使用隐式转换而不是 QueryInterface() 进行向上转换是否合法且具有多重继承?

假设我有一个实现两个或多个COM接口(interface)的类(与here完全一样):classCMyClass:publicIInterface1,publicIInterface2{};QueryInterface()必须为同一接口(interface)的每个请求返回相同的指针(需要显式向上转换才能正确调整指针):if(iid==__uuidof(IUnknown)){*ppv=static_cast(this);//callAddref(),returnS_OK}elseif(iid==__uuidof(IInterface1)){*ppv=static_cast(this);/

Visual Studio C++找到一个或多个多重定义的符号解决方法

1、当VisualStudioC++中一个项目下有两个及以上的源文件时,编译会产生错误:LNK200:_main已经在if_else的学习.obj中定义LNK116:找到一个或多个多重定义的符号原因是:一个项目下有两个及以上的源文件,如下图所示的ifelse的学习.cpp文件和learn1.cpp文件,里面都存在相同的函数名main()具体ifelse的学习.cpp文件和learn1.cpp文件的代码内容如下:learn1.cpp代码内容ifelse的学习.cpp中的代码内容:  可以看出ifelse的学习.cpp文件和learn1.cpp文件,里面都存在相同的函数main() 接着运行ife

Node.js + Redis 多重查找

我是键值存储的新手,但我想学习。作为个人项目,我正在尝试使用Node.js和Redis构建一个库存管理系统。我们假设这是目前要使用的正确技术。如果我有一个简单的系统,需要跟踪特定位置的小部件数量,并能够按小部件或位置查找详细信息,我的理解是https://matt.sh/thinking-in-redis-part-one是存储单独的“自定义索引”以按位置和按项目查找。然后在node.js中保存一个新条目,我们将使用hmset创建条目,使用sadd将条目添加到2个索引:redis.hmset([key,'attr1',entry.attr1,'attr2',entry.attr2,'a