草庐IT

继承权

全部标签

c++ - 继承和多态性——易用性与纯粹性

在一个项目中,我们的团队正在使用对象列表对应该以类似方式处理的数据集执行大量操作。特别是,不同的对象在理想情况下会表现出相同的行为,这很容易通过多态性来实现。我遇到的问题是继承意味着是一种关系,而不是具有关系。例如,几个对象有一个伤害计数器,但为了使其易于在对象列表中使用,可以使用多态性——除非这意味着一个是一个关系不会是真的。(人不是伤害计数器。)我能想到的唯一解决方案是让类的成员在隐式转换时返回正确的对象类型,而不是依赖继承。放弃是一个/有一个的理想以换取编程的便利会更好吗?编辑:更具体地说,我正在使用C++,因此使用多态性将允许不同的对象在派生类可以驻留在单个列表中并由基类的虚函

c++ - 无法转换具有多重继承的类

我正在尝试重构一些代码,同时保留现有功能。我无法将指向对象的指针强制转换为基接口(interface),然后稍后再获取派生类。在某些情况下,该程序使用工厂对象来创建这些对象的实例。以下是我正在使用的类的一些示例。//ThisistheoneI'mworkingwithnowthatiscausingallthetrouble.//Some,butnotallmethodsinNewAbstractandOldAbstractoverlap,soI//usedvirtualinheritance.classMyObject:virtualpublicNewAbstract,virtual

C++ 继承 - 如何使用指向基类对象的指针访问子方法

我有一个处理继承的任务。我有一个Employee()基类,Manager()和Intern()继承自该基类。我的导师给了我们以下指示:在main()中声明一个员工指针数组并将它们初始化为以下记录:Manager("IT",100,"MF1","ML1")Manager("HR",50,"MF2","ML2")Intern("SIUE",0,"IF1","IL1")Intern("SLU",0,"IF2","IL2")然后我必须遍历并显示数组。他作为示例提供的输出显示必须调用Manager()和Intern()toString()方法,因为输出了与子类相关的特定信息。但是,在访问数组时,

C++ 类继承和模板

我想在我的C++程序中编写如下内容:classA{public:voida();}templateclassC{Binstance;}这可能吗?换句话说:C++允许我说模板中的类是其他类的子类吗? 最佳答案 定义一个名为extends的元函数(这只是一个糖衣名字)如:templateusingextends=std::is_base_of;然后将您的类定义为:templateclassC{//hereyoucancheckit,andgenerateyourownerrormessage!static_assert(extends(

java - OOP 和私有(private)字段的继承

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭6年前。Improvethisquestion在C#中,规范说:Instanceconstructors,destructors,andstaticconstructorsarenotinherited,butallothermembersare,regardlessoftheirdeclaredaccessibility(§3.5).However,dependingontheirdeclaredaccessibility,inhe

c++ - 多重继承的模糊解决方法?

我有一个名为animal的基类,以及继承自Animal的狗和猫。还有一个名为dogcat的多继承类,它继承自dog和cat,在Animal中,我有一种叫做sleep的方法。当我想从dogcat使用该方法时,出现错误“DogCat::sleep”不明确,我确实理解这个问题,但我在一本书中读到它应该是可能的,当你将sleep声明为虚拟时-但它不起作用。这不可能是书错了还是有什么解决方法?classAnimal{public:Animal(){}virtualvoidsleep(){coutsleep();//Error} 最佳答案 你有

c++ - 奇怪的编译器错误和模板继承

谁能解释一下为什么这段代码:classsafe_bool_base{//13protected:typedefvoid(safe_bool_base::*bool_type)()const;voidthis_type_does_not_support_comparisons()const{}//18safe_bool_base(){}safe_bool_base(constsafe_bool_base&){}safe_bool_base&operator=(constsafe_bool_base&){return*this;}~safe_bool_base(){}};templatec

c++ - C++ 中的 DLL 导出和继承

我正在尝试从这样的DLL中导出一个类及其基类:#ifdefMY_EXPORTS#defineDECLSPEC_TEST__declspec(dllexport)#else#defineDECLSPEC_TEST__declspec(dllimport)#endifclassDECLSPEC_TESTBaseClass{//stuff.};classDECLSPEC_TESTDerivedClass:publicBaseClass{//Thisclassonlyhasaconstructorwhichinitializestheclassdifferently.};但是我尝试在另一个DL

c++ - 继承和重载默认构造函数

我一直在寻找这个,我很惊讶我什么也没找到。为什么我不能使用using声明继承基类构造函数并在派生类中添加重载?我正在使用VisualC++2013,在默认构造b时忽略基类构造函数:errorC2512:'B':noappropriatedefaultconstructoravailable我已经通过重新定义构造函数来解决这个问题,但我不喜欢这样。这只是一个最小的示例,如果我只有一个基类构造函数,我不会感到困扰。structA{A():a(10){}inta;};structB:A{usingA::A;explicitB(inta){this->a=a;}};intmain(){Bb;}

c++ - 抽象类的继承成员不能由继承的构造函数初始化

classCarPart{public:CarPart():name(""),price(0){}virtualintgetPrice()=0;//{returnprice;}protected:intprice;stringname;};classTire:publicCarPart{public:virtualintgetPrice(){returnprice;}Tire():CarPart(),name("Tire"),price(50){}};Visual2010告诉我name和price不是deriv的成员,但它们是继承的(错误c2614)。我做错了什么?