草庐IT

Inheritance

全部标签

c++ - 关于 C++ 编程语言的问题

在TheC++ProgrammingLanguage一书的第24.3.4章中说classCfield:publicField{/*...*/}ThisexpressesthenotionthataCfieldreallyisakindofField,allowsnotationalconveniencewhenwritingaCfieldfunctionthatusesamemberoftheFieldpartoftheCfield,and-mostimportantly-allowsaCfieldtooverrideFieldvirtualfunctions.Thesnagistha

C++友情与继承

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭11年前。我知道友情是不能继承的。我问自己:为什么?为什么C++设计者决定不让友元被继承?你觉得拥有友元继承权有用吗?我自己的回答是肯定的:就像B是A的friend一样,我想让整个类(class)成为A(B及其衍生物)的friend。也许,应该可以说:让仅B成为A的友元,或者让B和它的派生类成为A的友元。附言。我不知道为什么你们中的许多人认为我要求自动延长友元。我

c++ - 对 C++ 类继承有点生疏

子类访问protected成员对象的规则是什么?我以为我理解它们,但我的代码不同意。我有一个基类,定义为classDatum{public:Datum(Datum*r,Datum*l):right(r),left(l){}protected:Datum*right,*left;};我将Datum子类化如下:classColumn:publicDatum{public:Column(Datum*r,Datum*l,stringn,ints):Datum(r,l),name(n),size(s){}voidcover(){right->left=left;left->right=right

c++ - 通过继承C++成为 friend

假设我有两个类(class)Widget^|Window我还有另一个类应用程序:定义如下classApplication{public:...private:friendWidget;};这不会让Window访问Applicationsprotected和private成员。有没有一种方法可以在不将Window和任何后续“Widget”声明为Application的友元的情况下完成此操作? 最佳答案 不,这是不可能的。friendship不可继承。此外,friendship表示两个实体之间有意强耦合因此,如果您的设计确实需要如此强的

c++ - 不能继承的东西

我被要求说出三个不能从基类继承的东西。除了私有(private)成员函数,我还能添加什么?我考虑过友元函数,但由于它们实际上不属于类,因此与继承无关。 最佳答案 您通常关心的一些明显的是构造函数、赋值运算符和析构函数。在所有这些情况下,特定于派生类的新版本要么由用户提供,要么由编译器合成(尽管C++11还添加了一些功能,比如简单地删除你不需要的想要可用)。我应该补充一点,“不能被继承”不一定完全正确。例如,C++11添加了继承构造函数(但它们不在C++98/03中,这是大多数类(class)仍在处理的内容)。即使在C++11中,您也

c++ - "virtual base class in the case of multilevel inheritance"有意义吗

考虑以下显示多级继承的示例代码:案例1:这里类derived1是通过虚拟继承从类base派生的,类derived2是从类派生的直接类derived1。classbase{};classderived1:virtualpublicbase{};classderived2:publicderived1{};Case2:与Case1相同,只是不涉及虚拟继承classbase{};classderived1:publicbase//novirtualinheritance{};classderived2:publicderived1{};假设我在这两种情况下都创建了derived2类的对象。C

C++ 运算符重载和继承

所以我创建了一个通用Matrix类,它具有以下运算符重载:classMatrix{public:Matrix(){}Matrix(inti,intj,intk){}Matrixoperator*(constMatrix&right){}};我还有一个继承自Matrix类的Matrix2类。classMatrix2:publicMatrix{};当我尝试将两个Matrix2对象相乘时,出现编译器错误:'没有找到采用Matrix2类型的左手操作数的运算符(或者没有可访问的转换)'这是为什么?我如何才能正确地实现具有继承的运算符重载?编辑:正如所指出的,我的问题部分是因为“最令人烦恼的解析”

c++ - 为什么要使用虚拟基类?

根据我的阅读,当你有一个保存数据的抽象基类时使用虚拟基类,所以类不会被复制,但是,如果你不使用虚拟类,复制类有什么问题?是否应该避免保存数据的抽象基类?下面是一个例子:classStorable{public:Storable(conststring&s);virtualvoidread()=0;virtualvoidwrite()=0;virtual~Storable();protected:stringfile_name;//storeinfilenamedsStorable(constStorable&)=delete;Storable&operator=(constStorab

c++ - 两阶段查找 : is it possible to easily mix inheritence and templates

简介:C++标准区分依赖模板参数的符号名称和不依赖模板参数的名称,这称为两阶段名称查找(参见here)。定义模板时,会尽快解析非相关名称。另一方面,从属名称仅在模板实例化时解析。示例:templatestructBase{typedefTtype;staticconstintn=3;virtualintf()=0;intf(intx){returnx*2;}};//doesn'tcompile!templatestructDerived:Base{typefield;//Thecompilerdoesn'tknowBase::typeyet!intf(){returnn;}//thec

C++ 多态接口(interface)

我正在尝试创建一种方法来处理许多不同版本的协议(protocol),类似于问题Howtohandledifferentprotocolversionstransparentlyinc++?.我同意继承链可以很好地解决这个问题。这就是我在Java中的做法:创建一个IParser接口(interface),并有几个ParserV0、ParserV1、...类,相互继承并实现IParser。我知道由于某些多重继承和虚拟技巧,在C++中创建该结构是可能的。关键在于:在Java中,如果我想要一个解析器,我想,我可以说IParserparser=getCorrectVersion(...)。我会得