草庐IT

C++从父类的变量上继承子调用函数

在C++中,我有一个基类Packet,然后是很多子APIPacket、DataIOPacket等。现在我想存储传入的数据包,因为我不知道我将其存储在变量中的类型:Packetpacket;packet=DataIOPacket();但是现在DataIOPacket有一个函数getAnalogData();我做不到:packet.getAnalogData();因为packet没有这个功能。在Java中,我认为这是可能的,因为存储在数据包中的对象的实际类型不会丢失(这是正确的吗?)。但是在C++中,我的DataIOPacket被缩小为一个Packed并失去了它尚未在Packet中声明的功

c++ - 访问 C++ 父类的私有(private)成员

不幸的是,我有一个基本的C++问题让我感到困惑。最近我看到一篇文章使用向下转换来访问类的私有(private)成员。我的问题是它为什么有效?鉴于我有一个父类P和一个类型为dummy*的私有(private)成员m_p然后使用的方法是创建一个hack类hackP,如下所示:classhackP:publicP{public:dummy*m_p;};显然可以使用如下代码片段访问classP私有(private)成员m_pPparent=...;hackP*hp=(hackP*)&parent;//accessparentm_pashp->m_p如有任何帮助,我们将不胜感激。

c++ - 我怎样才能使 C++ 更喜欢匹配父类重载而不是模板?

classParent{};classChild:publicParent{};classFoo{public:Foo(Parent&){};templateFoo(constT&);};intmain(){Childc;Foofoo(c);}这会产生链接器错误,因为foo的构造函数选择templateFoo::Foo(constT&)而不是Foo::Foo(Parent&).如果c类型为Parent而不是Child,这使用非模板构造函数和链接没有问题。我可以解决这个问题Foofoo((Parent&)c);但我不想那样做。为什么C++更喜欢使用模板而不是隐式转换c至Parent&?我

c++ - 导入父类的所有变量

您可能已经注意到gcc的更高版本对标准更加严格(seethisquestion)模板类的所有继承成员都应该使用全名来调用,即。ParentClass::member而不仅仅是member但我仍然有很多不尊重这一点的旧代码。添加usingParentClass::member对于每个类(class)中的每个使用过的成员来说,这都是一件很痛苦的事情。有没有办法做类似usingParentClass::*的事情??。我希望这比在g++中停用此检查更好,但如果现在有办法,我该如何停用它?编辑:根据C++常见问题解答(感谢……),这些是正确解决继承的成员变量名称的唯一方法:从f()更改调用至th

c++ - 从具有非虚拟父类的虚拟类继承的正确方法

我编写了这个使用三种类型的测试代码:structOne是一个没有虚成员的普通类型,structTwo:One有一个纯虚函数和一个虚拟析构函数,structThree:Two实现了Two的接口(interface)。#includestructOne{~One(){std::couttest();One*one=two;deleteone;}不出所料,theoutputwas这个:Three::test()~One()除了让每个析构函数都成为虚拟函数之外,还有什么办法可以解决这个问题吗?或者程序员应该小心不要遇到这种情况?我觉得很奇怪,编译时没有警告。 最佳答

c++ - 如何使用父类的操作符?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Howtousebaseclass'sconstructorsandassignmentoperatorinC++?classA{protected:voidf();}classB:publicA{protected:voidf(){A::f();}}我们可以这样使用父类的函数,但是不知道如何使用父类的运算符。

c# - 父类(super class)构造函数中的虚拟化

我认为根据OOP的设计,虚拟化在父类(superclass)构造函数中不起作用。例如,考虑以下C#代码。usingSystem;namespaceProblem{publicclassBaseClass{publicBaseClass(){Console.WriteLine("Hello,World!");this.PrintRandom();}publicvirtualvoidPrintRandom(){Console.WriteLine("0");}}publicclassDescendent:BaseClass{privateRandomrandomValue;publicDes

c++ - 对父类(super class)的引用

我想结合智能指针使用访问者模式,但编译器似乎无法检测子类并匹配适当的函数。我写了一个SSCE来说明问题:测试.hpp:classVisitor;classArea{public:virtualvoidvisit(constVisitor&visitor)=0;};classArea1:publicArea{public:virtualvoidvisit(constVisitor&visitor);};classArea2:publicArea{public:virtualvoidvisit(constVisitor&visitor);};classVisitor{public:virt

c++ - 委托(delegate)和调用父类构造函数 : How do I do both?

我想知道关于派生类构造函数的委派。当您还必须调用父类的构造函数时,委托(delegate)构造函数的正确方法是什么?我知道您不能在同一个初始化列表中同时进行委托(delegate)和成员初始化,但我不知道调用父类的构造函数是否具有相同的限制。//Option1:Callparentclassconstructor,thendelegate:classFoo{public:Foo(int);};classBar:publicFoo{public:Bar(int,float):Foo(int),Bar(int,float,'c');Bar(int,float,char);};//Optio

C++ 从父类(super class)调用子类方法

我有以下风格的代码:classSubClass;classSuperClass;classSuperClass{private:voidbar(){SubClass().foo();}};classSubClass:SuperClass{public:voidfoo(){};};所以基本上我有一个父类(superclass),我想从中调用子类的方法foo()。VS2012给我以下错误:错误1​​errorC2514:'SubClass':类没有构造函数。错误2errorC2228:'.foo'的左侧必须有类/结构/union。我想做的事情的正确结构是什么?