草庐IT

polymorphism

全部标签

c++ - "run time templates"

我很确定答案是“你不能使用模板,你必须使用虚函数(动态多态性)”,但如果我走那条路,我似乎必须复制很多代码.这是设置:我目前有两个类,ColorImageSegmentation和GrayscaleImageSegmentation。他们做的事情本质上是一样的,但是有3个区别-它们对不同类型(ColorImage和GrayscaleImage)进行操作-一个参数,直方图的维度(3vs1)不同-PixelDifference函数根据图像类型不同如果我创建一个类templateclassImageSegmentation{};我会保持良好的状态。但是,我想让这个对象成为另一个类的成员:cl

c++ - 如何在派生类中重用基类函数

假设我们有这四个类:二叉树,SplayTree(它是BinaryTree的子类),二进制节点和SplayNode(它是BinaryNode的子类)。在BinaryTree类中,我有这两个函数,在SplayTree中,我想重用第一个函数,因为它的工作方式与SplayTree中的相同。//BinaryTree.cppboolFind(constT&data)const{Node*found=Find2(data,root);//...}virtualNode*Find2(constT&data,Node*node)const{//...}//SplayTree.cppusingBinary

c++ - 模板对象数组

我不知道如何解决模板和继承的问题。在我的代码中有一个模板类,它看起来或多或少像:templateclassDerived:publicBase{Tvalue;public:Derived(Targ){value=arg;};TgetValue(){returnvalue;};};classBase{};我的基类的唯一目的是对派生类的一组对象进行分组。参数T通常是double、float或complex,尽管int和structs也可能有用。(稍后应该还有几个类似的派生类,带有一些附加功能。)我可以创建这样一个群Base**M=newBase*[numElements];并将派生类的元素

c++ - std::vector 类型引用的无效初始化

这是错误:DummyService.hpp:35:error:invalidcovariantreturntypefor'virtualstd::vector>&DummyService::list(conststd::string&)'classBean{public:typedefstd::stringPath;virtual~Bean(){};virtualconstPath&getPath()=0;virtualconststd::string&getName()=0;protected:Bean();};classResourceBean:publicBean{public:

c++ - 将基类的对象转换为派生类

几天前我问了一些clarificationsoninheritance,一个我仍在努力理解的概念。这是后续问题,因为我仍然面临问题。在我的项目中,我有两种类型的对象,手和脸,它们都继承自基类BodyPart。BodyPart是这样的:classBodyPart{public:typedefboost::shared_ptrBodyPartPtr;BodyPart();virtual~BodyPart();private:intcommonMember1;doublecommonMember2;public:intcommonMethod1();intCommonMethod2();}而

c++ - 虚拟基类析构函数调用顺序?

C++常见问题解答项目20.05:"Virtualbaseclassesarespecial,theirdestructorsarecalledattheendofthemostderivedclass'destructor(only)."我真的不明白这如何符合典型的:“先数据成员析构函数,再基类析构函数”规则虚基类有什么特别之处?我不知道上面的意思是什么:s 最佳答案 虚拟基类的关键属性是它们总是在派生类的任何对象中生成单个唯一基子对象。这正是虚拟基类的特别之处,这使得它们不同于可以生成多个子对象的常规基类。例如,在这个层级中st

c++ - std::bind 是否丢弃 C++11 中参数的类型信息?

问题发生案例请考虑以下C++代码:#include#include#include//SuperclassclassA{public:virtualstd::stringget()const{return"A";}};//SubclassclassB:publicA{public:virtualstd::stringget()const{return"B";}};//Simplefunctionthatprintstheobjecttypevoidprint(constA&instance){std::cout在这个例子中,我们有两个类A和B。B继承自类A。这两个类都实现了一个返回类型

c++ - 使用不同的实现文件来实现多态是不是可以?

如果给定接口(interface)有多个所需的实现,但所需的具体实现在编译时就已知,那么简单地将make文件定向到同一header的不同实现文件是否错误?例如,如果有一个定义汽车的程序(Car.h)//Car.hclassCar{public:stringWhatCarAmI();}并且在构建时我们知道我们想要它是法拉利还是菲亚特,给每个相应的文件://Ferrari.cpp#include"Car.h"stringCar::WhatCarAmI(){return"Ferrari";}而对于另一种情况(不出所料)//Fiat.cpp#include"Car.h"stringCar::W

c++ - 为什么 dynamic_cast 可以用于非多态类型的向上转换?

参见here:dynamic_castcanonlybeusedwithpointersandreferencestoclasses(orwithvoid*).Itspurposeistoensurethattheresultofthetypeconversionpointstoavalidcompleteobjectofthedestinationpointertype.Thisnaturallyincludespointerupcast(convertingfrompointer-to-derivedtopointer-to-base),inthesamewayasalloweda

c++ - 转换整个 vector

是否可以转换std::vector>到std::vector>其中SpecializedObject继承Object,而不构建新数组(或遍历vector)? 最佳答案 简短的回答:没有。长答案:std::vector>和std::vector>是完全不同且无关的野兽,你不能从一种类型转换为另一种类型。您必须遍历vector并从中创建一个新vector。提示:您仍然可以使用static_pointer_cast在迭代时转换指针(当然,如果您知道自己在做什么)。 关于c++-转换整个vect