草庐IT

多重性

全部标签

c++ - C++接口(interface)的多重继承

我有一个对象接口(interface)和一个派生对象可能希望支持的接口(interface)的开放式集合。//AnobjectclassIObject{getAttribute()=0}//AmutableobjectclassIMutable{setAttribute()=0}//AlockableobjectclassILockable{lock()=0}//AcertifiableobjectclassICertifiable{setCertification()=0getCertification()=0}一些派生对象可能看起来像这样:classObject1:publicIO

c++ - C/C++ 代码中函数的多重定义

这是一道关于C/C++函数定义的题。讨论的代码是static库libRmath,它在R的Rmath.h头文件中提供定义。为库提供的documentation表明用户可以选择为函数doubleunif_rand(void)提供函数定义。所以我的问题是,如果这样的函数定义是可选的,会不会出现C/C++中不允许的多个函数定义的问题?编辑:在不查看源代码的情况下推测事情是如何工作的可能很诱人,但这不是我想要的。我很想知道它真正是如何工作的,因此您可能需要阅读sourcecode和documentations才能回答这个问题。 最佳答案 当您

c++ - 为什么我不能多重声明一个类

我能做到externinti;externinti;但是我不能对类做同样的事情classA{..}classA{..}虽然在这两种情况下都没有分配内存。 最佳答案 以下是声明:externinti;classA;接下来的两个是定义:inti;classA{...};规则是:定义也是声明。您必须“看到”一个项目的声明才能使用它。可以重新声明(必须相同)。重新定义是一个错误(单一定义规则)。 关于c++-为什么我不能多重声明一个类,我们在StackOverflow上找到一个类似的问题:

c++ - 在进程中隔离和多重实例化 C 库

我们有一个C库(.libwindows和.alinux),它只允许创建一个单例,并且在实例化后也不能正常关闭(内存泄漏和线程保持事件状态)。重写它并找出错误,是否有一种简单的方法可以在进程中隔离这种行为不当的代码,从而可以删除单例限制,并且可以将不干净的tidyup沙盒化?我主要对任何进程中的选项感兴趣,如果确实有的话。一个单独的过程显然可以解决它,但是会产生架构开销以允许远程控制库,除非有非常低影响的解决方案(它有一个广泛的API,所以维护很多胶水并不是特别有吸引力)。 最佳答案 抱歉,没有简单的方法来做到这一点。对行为不当的库进

c++ - 使用 `void_t`检测多重继承类型重复错误

我想实现一个has_no_duplicates评估为std::true_type的类型特征如果传递的可变类型列表没有重复类型。static_assert(has_no_duplicates{},"");static_assert(!has_no_duplicates{},"");让我们假设,对于这个问题的范围,我想使用多重继承来做到这一点。当一个类多次从同一类型继承时,就会发生错误。templatestructtype{};templatestructdup_helper:type...{};//Noerrors,compilesproperly.dup_helperok{};//Co

C++ 多重继承 - 为什么你没有工作?

我正在尝试找出一个有趣的多重继承问题。祖parent是一个有多个方法的接口(interface)类:classA{public:virtualintfoo()=0;virtualintbar()=0;};然后还有一些抽象类在部分完成这个接口(interface)。classB:publicA{public:intfoo(){return0;}};classC:publicA{public:intbar(){return1;}};我想使用的类继承自两个父类,并通过using指令指定应该从哪里来的方法:classD:publicB,publicC{public:usingB::foo;us

c++ - 具有多重继承的 operator() 定义不明确

我用GCC(4.2.1Applebuild5664)编译这段代码#includeusingstd::size_t;templatestructindex{};structa{voidoperator()(size_tconst&){}};structb{templatevoidoperator()(indexconst&){}};structc:publica,publicb{};intmain(intargc,charconst*argv[]){cvc;vc(1);return0;}并给我以下错误:main.cpp:Infunction‘intmain(int,constchar**

c++ - 多重继承 : unexpected result after cast from void * to 2nd base class

我的程序需要使用void*以便在动态调用情况下传输数据或对象,以便它可以引用任意类型的数据,甚至原始类型。但是,我最近发现,在具有多个基类的类的情况下向下转换这些void*的过程失败,甚至在调用这些向下转换的指针上的方法后我的程序崩溃,即使内存地址看起来是正确的。崩溃发生在访问“vtable”期间。所以我创建了一个小测试用例,环境是MacOSX上的gcc4.2:classShape{public:virtualintw()=0;virtualinth()=0;};classSquare:publicShape{public:intl;intw(){returnl;}inth(){ret

c++ - 关于 C++ 中的多重继承的问题?

我有以下代码:#include"stdafx.h"#include#includeusingnamespacestd;#defineMNAME30classPerson{public:charname[MNAME+1];};classStudent:publicPerson{};classStaff:publicPerson{};classFaculty:publicStudent,publicStaff{};int_tmain(intargc,_TCHAR*argv[]){Facultyfaculty;cout程序执行时,给出结果:Addressoffaculty.Person::n

c++ - 地址、reinterpret_cast 和多重继承

任何人都可以解释以下代码的行为吗?为什么在第一种情况下我们有b=3,即b2==&d为真?为什么在案例2中没问题?b2和d的地址我打印出来了,它们是不一样的。#includeusingnamespacestd;classA{public:A():m_i(0){}protected:intm_i;};classB{public:B():m_d(0.0){}protected:doublem_d;};classC:publicA,publicB{public:C():m_c('a'){}private:charm_c;};intmain(){Cd;B*b2=&d;cout(b2)==rein