草庐IT

Inheritance

全部标签

c++ - 不明确的类继承

#include#includeusingnamespacestd;classTcirculo{floatradio;floatdiametro;floatarea;public:voidcarea(floatr){radio=r;area=(M_PI*((r*r)));}floatcdiam(floatr){diametro=2*r;returndiametro;}floatgetr(){returnradio;}floatgetd(){returndiametro;}floatgeta(){returnarea;}};classTrectangulo:publicTcirculo{

C++ 使用自己的类的元素继承堆栈

我正在尝试创建自己的类(NodeWithMin)作为C++中堆栈的元素,并创建一个继承它的新类(StackWithMin)。我想我可以创建新的堆栈类,但是在初始化新类的新实例并使用它时遇到一些问题。有人对此有好主意吗?我将所有类和主要内容写在一个文件中。谢谢。#includeclassNodeWithMin{public:intvalue;intmin;NodeWithMin(intv,intmin){this->value=v;this->min=min;}};templateclassStackWithMin:stack{public:typedefstacksuper;voidp

c++ - 在具有菱形继承和虚拟基类的类中调用函数的策略

如果我们有菱形继承并使用公共(public)虚拟基类,我们可以阻止第一个构造函数被多次调用。现在,我想对构造函数之外的函数做同样的事情。例如代码:#includestructA{virtualvoidfoo(){std::cout产生结果ABACD我想修改它,让它只产生ABCD什么样的策略或模式可以做到这一点?编辑1与以下相比,我更喜欢TonyD的回答。尽管如此,理论上可以使用另一个类的构造函数来定义适当的函数层次结构。具体#includestructA;structB;structC;structD;namespacefoo{structA{A(::A*self);};structB

C# 编码 C++ 结构继承

假设我在C++中有以下结构structBase{USHORTsize;}structInherited:publicBase{BYTEtype;}我想在C#中编码Inherited但结构继承在C#中不起作用。做以下是否合适?publicinterfaceIBase{ushortSize{get;set;}}[StructLayout(LayoutKind.Sequential)]publicstructInherited:IBase{publicushortSize{get;set;}publicbyteType{get;set;}}我在这里简化了问题,我的结构更大,因此很难验证结果。

c++ - 为什么我们必须在复制构造函数的参数中使用引用而不是指针?

为什么我们必须在复制构造函数的参数中使用引用而不是指针?这个问题是在采访中被问到的。我回复了以下几点:引用不能为NULL。如果我们使用指针,那么它就不是拷贝构造函数。标准规定如此(第12.8.2节)。但是面试官并不满意。他说这“与继承和虚函数有关”。我需要帮助或一些相关要点,以便我能够在那个方向上想到答案。 最佳答案 你的观点看起来很合理,我不知道你的面试官想听你说什么。但是,据我所知,为复制构造函数和赋值运算符启用统一语法是Stroustrup引入引用的一个重要原因。例如,假设我们在C++中没有引用,我们想做一些复制构造,通过指针

c++ - 关于来自 VC12 和 VC14 的 c++ 友元和继承的不同行为

classBase{protected:voidfunc1();};classDerived:publicBase{friendclassThird;};classThird{voidfoo(){Derived;d.func1();}};我可以在VC14(VisualStudio2015)中编译代码而不会出错但从VC12(VisualStudio2013)得到错误cannotaccessprotectedmemberdeclaredinclass'Base'谁是对的?这种具有继承性的友元的正确性是什么?来自MSDNhttps://msdn.microsoft.com/en-us/lib

c++ - 是否有可能有一个继承最终函数但创建相同函数(而不是重写)的派生类?

final函数有问题。我想“停止”类中的多态性,但我仍想在派生类中生成相同的函数。像这样:classBase{protected:int_x,_y;public:Base(intx=0,inty=0):_x(x),_y(y){};intx()const{return_x;}inty()const{return_y;}virtualvoidprint()const{cout 最佳答案 我认为这是一个实验性问题,因为实际上当您需要“覆盖最终函数”时您应该重新考虑您在做什么(听起来很矛盾,不是吗?)。但是您可以引入一个“虚拟”参数,即vo

c++ - 使用基类实例创建派生类实例

我有一个基类实例,有一个继承自基类的派生类,我想将基类实例转换为派生实例,(如果可能的话不复制任何东西(可能向派生类发送一个基类))我该如何实现?注意:我需要这个,因为我使用的是工厂设计模式,它标识需要使用位于基实例中的参数创建的派生类。//classA//classB:publicA(purevirtual)//classC:publicBBBFactory::makeB(A&a){intn=a.getN();if(n==1){returnnewC();}}谢谢。 最佳答案 考虑汽车的情况。您可以将兰博基尼视为汽车。您可以将Yug

c++ - SFINAE 没有避免模棱两可的调用

编译这段代码:#includetemplatestructTestClass{template::type=0>voiddoAction(){std::cout();\n";}};structHostClass:publicTestClass,publicTestClass{};intmain(intargc,constchar*argv[]){HostClasshostClass;hostClass.doAction();hostClass.doAction();return0;}导致不明确的调用错误,因为doAction都在TestClass中和TestClass父类。main.c

c++ 模板类继承问题

我在编译一段可以简单化如下的代码时遇到错误:#includetemplateclassA{protected:TprotectedValue;templateclassinsideClass{public:TTinsideClassValue;};};templateclassB:publicA{public:voidprint(Tt){insideClassic;//b;b.print(v);return0;};编译器(g++)给出以下错误:main.C:Inmemberfunction‘voidB::printA()’:main.C:23:4:error:‘insideClass’