草庐IT

多重性

全部标签

c++ - 多重继承和纯虚函数

以下代码:structinterface_base{virtualvoidfoo()=0;};structinterface:publicinterface_base{virtualvoidbar()=0;};structimplementation_base:publicinterface_base{voidfoo();};structimplementation:publicimplementation_base,publicinterface{voidbar();};intmain(){implementationx;}编译失败,出现以下错误:test.cpp:Infunctio

c++ - 多重继承+虚函数困惑

我有一个像这样的菱形多重继承场景:A/\BC\/D共同的父节点A定义了一个虚函数fn()。B和C都可以定义fn()吗?如果是,那么下一个问题是-D可以无歧义地访问B和C的fn()吗?我假设这有一些语法..D是否有可能在不明确知道B和C是谁的情况下这样做?B和C可以被其他一些类替换,我希望D中的代码是通用的。我想要做的是让D以某种方式枚举它在其祖先中拥有的所有fn()实例。这是否可能以其他方式表示虚函数? 最佳答案 除非您在D中再次覆盖fn,否则这是不可能的。因为在D对象中没有最终覆盖器:C和B都覆盖了A::fn。您有多种选择:删除C

c++ - 多重继承+虚函数困惑

我有一个像这样的菱形多重继承场景:A/\BC\/D共同的父节点A定义了一个虚函数fn()。B和C都可以定义fn()吗?如果是,那么下一个问题是-D可以无歧义地访问B和C的fn()吗?我假设这有一些语法..D是否有可能在不明确知道B和C是谁的情况下这样做?B和C可以被其他一些类替换,我希望D中的代码是通用的。我想要做的是让D以某种方式枚举它在其祖先中拥有的所有fn()实例。这是否可能以其他方式表示虚函数? 最佳答案 除非您在D中再次覆盖fn,否则这是不可能的。因为在D对象中没有最终覆盖器:C和B都覆盖了A::fn。您有多种选择:删除C

c++ - 虚拟析构函数和删除具有多重继承的对象......它是如何工作的?

首先,我理解为什么在单继承和通过基指针删除对象方面需要virtual析构函数。这特别是关于多重继承以及为什么这有效的原因。这个问题出现在我的一堂大学类(class)中,没有人(包括教授)知道为什么会这样:#includestructA{virtual~A(){std::cout这个的输出是:~AB~B~A~AB~B~A编译器如何知道在删除a或bA和B的析构函数?具体来说,AB的内存是如何布局的(特别是它的虚函数表),以便可以调用A和B析构函数?我的教授建议将内存布局(某种东西)如下:AB+---------++----+|AVFT|------>|~A|+---------++----

c++ - 虚拟析构函数和删除具有多重继承的对象......它是如何工作的?

首先,我理解为什么在单继承和通过基指针删除对象方面需要virtual析构函数。这特别是关于多重继承以及为什么这有效的原因。这个问题出现在我的一堂大学类(class)中,没有人(包括教授)知道为什么会这样:#includestructA{virtual~A(){std::cout这个的输出是:~AB~B~A~AB~B~A编译器如何知道在删除a或bA和B的析构函数?具体来说,AB的内存是如何布局的(特别是它的虚函数表),以便可以调用A和B析构函数?我的教授建议将内存布局(某种东西)如下:AB+---------++----+|AVFT|------>|~A|+---------++----

c++ - 多重继承导致的“无法访问的直接基础”

剧透警告:也许是个愚蠢的问题。:)#includeusingnamespacestd;classBase{public:virtualvoidYourMethod(int)const=0;};classIntermediate:privateBase{public:virtualvoidYourMethod(inti)const{cout有人可以向我解释为什么会引发编译器警告:main.cpp:21:warning:directbase‘Base’inaccessiblein‘Derived’duetoambiguity现在,我知道这段代码无法正常工作。我想知道为什么。

c++ - 多重继承导致的“无法访问的直接基础”

剧透警告:也许是个愚蠢的问题。:)#includeusingnamespacestd;classBase{public:virtualvoidYourMethod(int)const=0;};classIntermediate:privateBase{public:virtualvoidYourMethod(inti)const{cout有人可以向我解释为什么会引发编译器警告:main.cpp:21:warning:directbase‘Base’inaccessiblein‘Derived’duetoambiguity现在,我知道这段代码无法正常工作。我想知道为什么。

c++ - 命名空间变量的多重定义,C++编译

我正在编写一个简单的Makefile,看起来像这样CC=gccCXX=g++DEBUG=-gCOMPILER=${CXX}a.out:main.cppMail.otrie.oSpambin.o${COMPILER}${DEBUG}main.cppMail.otrie.oRe2/obj/so/libre2.sotrie.o:trie.cpp${COMPILER}${DEBUG}-ctrie.cppMail.o:Mail.cpp${COMPILER}${DEBUG}-cMail.cppSpambin.o:Spambin.cpp${COMPILER}${DEBUG}-cSpambin.cpp

c++ - 命名空间变量的多重定义,C++编译

我正在编写一个简单的Makefile,看起来像这样CC=gccCXX=g++DEBUG=-gCOMPILER=${CXX}a.out:main.cppMail.otrie.oSpambin.o${COMPILER}${DEBUG}main.cppMail.otrie.oRe2/obj/so/libre2.sotrie.o:trie.cpp${COMPILER}${DEBUG}-ctrie.cppMail.o:Mail.cpp${COMPILER}${DEBUG}-cMail.cppSpambin.o:Spambin.cpp${COMPILER}${DEBUG}-cSpambin.cpp

C++:头文件中全局函数的多重定义错误

这个函数是全局的,定义在头文件中(暂时我想保留在那里)。头文件还构成了一个具有内联函数的特定类,其中一个函数调用this全局函数。源文件不包含任何出现问题的全局函数。关于错误原因的任何提示?如果有人感兴趣,我可以发布代码。mainwindow.o:Infunction`tileForCoordinate(double,double,int)':mainwindow.cpp:(.text+0x310):multipledefinitionof`tileForCoordinate(double,double,int)'main.o:main.cpp:(.text+0xd0):firstde