草庐IT

polymorphism

全部标签

c++ - 模板多态性

我有这种类结构。classInterface{//...};classFoo:publicInterface{//...};templateclassContainer{//...};我还有其他一些Bar类的构造函数。Bar(constContainer&bar){//...}当我以这种方式调用构造函数时,我得到一个“没有匹配的函数”错误。Containercontainer();Bar*temp=newBar(container);怎么了?模板不是多态的吗? 最佳答案 我认为您需要的确切术语是“模板协方差”,这意味着如果B继承自A

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++ - 多态性或条件会促进更好的设计吗?

我最近偶然发现了thisentryinthegoogletestingblog关于编写更多可测试代码的指南。在此之前我一直与作者达成一致:Favorpolymorphismoverconditionals:Ifyouseeaswitchstatementyoushouldthinkpolymorphisms.Ifyouseethesameifconditionrepeatedinmanyplacesinyourclassyoushouldagainthinkpolymorphism.Polymorphismwillbreakyourcomplexclassintoseveralsmal

c++ - 多态性或条件会促进更好的设计吗?

我最近偶然发现了thisentryinthegoogletestingblog关于编写更多可测试代码的指南。在此之前我一直与作者达成一致:Favorpolymorphismoverconditionals:Ifyouseeaswitchstatementyoushouldthinkpolymorphisms.Ifyouseethesameifconditionrepeatedinmanyplacesinyourclassyoushouldagainthinkpolymorphism.Polymorphismwillbreakyourcomplexclassintoseveralsmal

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

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

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

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

c++ - 不能因为类不是多态而沮丧?

是否可以在没有虚拟方法的情况下进行继承?编译器说下面的代码不是多态的。例子:classA{public:inta;intgetA(){returna;};}classB:publicA{public:intb;intgetB(){returnb;};}在另一个类中,我们试图从A对象向下转换为B对象:A*a=...;B*b=dynamic_cast(a)但这会产生以下编译时错误:cannotdynamic_cast...(sourcetypeisnotpolymorphic) 最佳答案 语法错误是不可容忍的,您不能dynamic_ca

c++ - 不能因为类不是多态而沮丧?

是否可以在没有虚拟方法的情况下进行继承?编译器说下面的代码不是多态的。例子:classA{public:inta;intgetA(){returna;};}classB:publicA{public:intb;intgetB(){returnb;};}在另一个类中,我们试图从A对象向下转换为B对象:A*a=...;B*b=dynamic_cast(a)但这会产生以下编译时错误:cannotdynamic_cast...(sourcetypeisnotpolymorphic) 最佳答案 语法错误是不可容忍的,您不能dynamic_ca

c++ - 从基类调用虚函数

假设我们有:ClassBase{virtualvoidf(){g();};virtualvoidg(){//DosomeBaserelatedcode;}};ClassDerived:publicBase{virtualvoidf(){Base::f();};virtualvoidg(){//DosomeDerivedrelatedcode};};intmain(){Base*pBase=newDerived;pBase->f();return0;}将从Base::f()调用哪个g()?Base::g()还是Derived::g()?谢谢... 最佳答案