草庐IT

virtual-inheritance

全部标签

c++ - 如何在 C++ 中实现 "virtual template function"

首先:我已经阅读并且我现在知道在C++中虚拟模板成员函数(还没有?)是不可能的。一种解决方法是将类设为模板,然后在成员函数中也使用模板参数。但是在OOP的上下文中,如果类实际上是一个模板,我发现下面的示例将不是很“自然”。请注意,代码实际上不起作用,但gcc-4.3.4报告:error:templatesmaynotbe'virtual'#include#includeclassAnimal{public:templatevirtualvoideat(AMOUNTamount)const{std::coutvoideat(AMOUNTamount)const{std::coutvoid

c++ - 如何在 C++ 中实现 "virtual template function"

首先:我已经阅读并且我现在知道在C++中虚拟模板成员函数(还没有?)是不可能的。一种解决方法是将类设为模板,然后在成员函数中也使用模板参数。但是在OOP的上下文中,如果类实际上是一个模板,我发现下面的示例将不是很“自然”。请注意,代码实际上不起作用,但gcc-4.3.4报告:error:templatesmaynotbe'virtual'#include#includeclassAnimal{public:templatevirtualvoideat(AMOUNTamount)const{std::coutvoideat(AMOUNTamount)const{std::coutvoid

c++ - 在 C++ 编译期间出现 'has virtual method ... but non-virtual destructor' 警告是什么意思?

#includeusingnamespacestd;classCPolygon{protected:intwidth,height;public:virtualintarea(){return(0);}};classCRectangle:publicCPolygon{public:intarea(){return(width*height);}};有编译警告Class'[C@1a9e0f7'hasvirtualmethod'area'butnon-virtualdestructor如何理解这个警告以及如何改进代码?[EDIT]这个版本现在正确吗?(试图给出答案以阐明自己的概念)#inc

c++ - 在 C++ 编译期间出现 'has virtual method ... but non-virtual destructor' 警告是什么意思?

#includeusingnamespacestd;classCPolygon{protected:intwidth,height;public:virtualintarea(){return(0);}};classCRectangle:publicCPolygon{public:intarea(){return(width*height);}};有编译警告Class'[C@1a9e0f7'hasvirtualmethod'area'butnon-virtualdestructor如何理解这个警告以及如何改进代码?[EDIT]这个版本现在正确吗?(试图给出答案以阐明自己的概念)#inc

通过优势警告进行 C++ 继承

我正在尝试实现一个相当大的对象,它实现了许多接口(interface)。其中一些接口(interface)是纯虚拟的。我可能在菱形继承(钻石问题)上有问题。VisualStudio报告C4250('class1':inherits'class2::member'viadominance)的警告。首先,这些类实际上是按应有的方式继承的。以下是导致此问题的部分类设计。ABC\/\/\/\/ABBC|||BC2||\D:ImplementationofB,C,BC,BC2\/Big在这整个树中,只有D实现了虚拟方法,没有其他定义的方法。B的所有虚方法都列在警告中。如果重要,D是一个完整的类。

通过优势警告进行 C++ 继承

我正在尝试实现一个相当大的对象,它实现了许多接口(interface)。其中一些接口(interface)是纯虚拟的。我可能在菱形继承(钻石问题)上有问题。VisualStudio报告C4250('class1':inherits'class2::member'viadominance)的警告。首先,这些类实际上是按应有的方式继承的。以下是导致此问题的部分类设计。ABC\/\/\/\/ABBC|||BC2||\D:ImplementationofB,C,BC,BC2\/Big在这整个树中,只有D实现了虚拟方法,没有其他定义的方法。B的所有虚方法都列在警告中。如果重要,D是一个完整的类。

c++标准实践: virtual interface classes vs.模板

我必须就泛化与多态做出决定。这个场景是标准的:我想让我的单体相互依赖代码更加模块化、干净和可扩展。仍处于改变设计原则可行的阶段,而且,在我看来,这是非常可取的。我会引入纯虚拟基类(接口(interface))还是模板?我了解有关模板选项的基础知识:更少的间接性,更好的性能,更多的编译但没有后期绑定(bind),等等。STL不使用太多(或没有?)继承,boost也不使用。但我认为这些旨在成为每个人都使用的非常小的基本工具程序员写的两行代码。我认为继承和后期绑定(bind)方法更适合应可互换的大段代码和功能的插件风格,可在部署后甚至在运行时更新等。好吧,我的情况介于两者之间。我不需要在运行

c++标准实践: virtual interface classes vs.模板

我必须就泛化与多态做出决定。这个场景是标准的:我想让我的单体相互依赖代码更加模块化、干净和可扩展。仍处于改变设计原则可行的阶段,而且,在我看来,这是非常可取的。我会引入纯虚拟基类(接口(interface))还是模板?我了解有关模板选项的基础知识:更少的间接性,更好的性能,更多的编译但没有后期绑定(bind),等等。STL不使用太多(或没有?)继承,boost也不使用。但我认为这些旨在成为每个人都使用的非常小的基本工具程序员写的两行代码。我认为继承和后期绑定(bind)方法更适合应可互换的大段代码和功能的插件风格,可在部署后甚至在运行时更新等。好吧,我的情况介于两者之间。我不需要在运行

c++ - 为什么我们需要使用 virtual ~A() = default;而不是 C++11 中的虚拟 ~A() {}?

在堆栈溢出帖子中CheckingtheobjecttypeinC++11,我有意见:InC++11you'llactuallywanttodovirtual~A()=default;Otherwise,you'lllosetheimplictmoveconstructors.virtual~A()=default;是干什么用的?virtual~A(){}为何会丢失隐式移动构造函数? 最佳答案 评论不正确。两者:virtual~A()=default;和virtual~A(){}被用户声明。如果析构函数是用户声明的,则隐式移动成员将被

c++ - 为什么我们需要使用 virtual ~A() = default;而不是 C++11 中的虚拟 ~A() {}?

在堆栈溢出帖子中CheckingtheobjecttypeinC++11,我有意见:InC++11you'llactuallywanttodovirtual~A()=default;Otherwise,you'lllosetheimplictmoveconstructors.virtual~A()=default;是干什么用的?virtual~A(){}为何会丢失隐式移动构造函数? 最佳答案 评论不正确。两者:virtual~A()=default;和virtual~A(){}被用户声明。如果析构函数是用户声明的,则隐式移动成员将被