草庐IT

Inheritance

全部标签

c++ - VC++ 警告 C4356 : static data member cannot be initialized via derived class

以下代码发出此警告,但它似乎工作正常,因为A::st和B::st都已初始化并且实际上代表相同的字符串。据我了解,这是格式错误的代码,不应编译(我检查了clang)。我想知道为什么VC++不发出错误而是发出警告?#include#includeclassA{public:staticconststd::stringst;};classB:publicA{};conststd::stringB::st="abcd";//warningC4356:'A::st':staticdatamembercannotbeinitializedviaderivedclassintmain(){std::

c++ - 指向组合接口(interface)的指针 - 指向实现一个接口(interface)并从另一个接口(interface)的实现扩展的类

我有两个接口(interface):classFirstInterface{virtualintgetId()const=0;};classSecondInterface{virtualvoidsetId(intid)=0;};这是一个组合界面:classCombinedInterface:publicFirstInterface,publicSecondInterface{};这是第一个接口(interface)的具体类:classFirstConcrete:publicFirstInterface{virtualintgetId()const{return1;}};现在,这个类Co

c++ - 将继承自某个类的所有类加为好友

这与其说是一个实际问题,不如说是一种求知欲。我想知道在C++中是否有一种方法可以执行以下操作:让A成为一个类。我想使B类与继承自A的所有类成为friend。先说再说:我明明知道友情是不能遗传的。我想做的是制作一个templatefriend声明,也许使用SFINAE,将B与每个类C交友,以便C继承自A。这样的事情有可能吗?我试图从最简单的情况开始:你能和所有其他类(class)交friend吗?显然我知道这没有任何意义,可以将事情公开,但也许从这个起点开始可以完善事情以仅选择那些继承自A的类。 最佳答案 解决方法是使用继承的“key

c++ - C++ 中的继承 : define variables in parent-child classes

问题我正在寻找在父子类中定义变量的最佳方法,以便通过指向其父类的指针进行调用。这是协议(protocol):classBase{public:virtualvoidfunction()=0;};classA:publicBase{public:inta,b;A(inta_,intb_):a(a_),b(b_){};voidfunction(){//dosomething..}};classB:publicBase{public:inta,b;B(inta_,intb_):a(a_),b(b_){};voidfunction(){//dosomething..}};Base*elemen

c++ - 向下转换指向成员函数的指针。这是合法的用法吗?

我将指向成员函数的指针列表存储在一个数组中。我想索引到数组中并执行适当的函数。将有许多数组列出来自不同类(全部派生自Base)的函数,因此在编译时不知道该类。我的方案有效,但我对不得不在一个地方使用void指针并不完全满意,但我似乎无法避免它。根据C++11标准(它使用g++),我在Base和Derived成员函数指针之间的转换是否合法。我将不胜感激语言律师的建议!下面是我的代码的一个精简但可运行的版本。#includeusingstd::cout;//*************************************classBase{public:typedefint(Ba

c++ - 在派生类的基类构造函数中使用重写函数

我是C++编程的新手,所以我想编写一些简单的代码来熟悉语法。我暂时故意忽略了指针和引用。在编码过程中,我正在练习继承,我想创建一个代表一手牌的Hand类。基类有一个名为update()的函数,用于在构造时初始化“total”和“notation”属性。此外,可以使用add()函数将卡片添加到手中,该函数将卡片添加到手中并触发update()以适本地更新属性。#includeclassHand{public:std::vectorcards;inttotal;std::stringnotation;//Abbreviatednotationoftheobject//Constructor

c++ - 为派生类提供模板特化的最简单方法

我有以下场景:classmy_base{...}classmy_derived:publicmy_base{...};templatestructmy_traits;我想为从my_base派生的所有类专门化my_traits,包括,例如:template//Yisderivedformmy_base.structmy_traits{...};我可以毫无问题地向my_base添加标签和成员以使其更简单。我已经看到了一些技巧,但我仍然感到迷茫。如何以简单快捷的方式做到这一点? 最佳答案 好吧,你不需要自己写isbaseof。您可以使用b

C++ - 从抽象基指针调用派生函数

我一直在尝试创建基于继承的TCP服务器模型,并取得了不同程度的成功。这些服务器由一个单例管理,其任务是关闭这些服务器和其他简单的维护功能:classTCPServer{public:TCPServer();~TCPServer();voidBind(TCPDaemon*daemon){if(!daemon->IsRunning()){throwTCPBindException("Daemonisinactive");}//iftheportisnottaken,bindthisdaemontoitif(this->servers.count(daemon->port())==0){th

c++ - 访问父类(super class)类型成员对象的 protected 成员——一个优雅的解决方案

首先,我知道我做不到,我认为这不是重复的问题(this和this问题处理的是同一个问题,但他们只想解释为什么它不起作用).所以,我对类和继承有类似的概念,我会以某种方式优雅地做一些被禁止的事情。这是一个非常简单的代码片段,它反射(reflect)了我想要做的事情:#includeclassA{protected:intvar;std::vectorheavyVar;public:A(){var=1;}virtual~A(){}virtualvoidfunc(){std::coutvarmyA=&a;this->var=this->myA->var;//copysomesimpledat

c++ - 如何继承构造函数,或者如何调用参数数量未知的构造函数?

我正在尝试编写一个异常类,以便于与行为类似于printf的构造函数一起使用,示例:classExcBase{ExcBase(constchar*fmt,...){//callthingslikevsprintf}};但是构造的继承在c++中似乎不可用,所以我想写一个继承的类:classExcChild:publicExcBase{ExcChild(constchar*fmt,...):ExcBase(fmt,...)//XXX:howtopassthetrailingparameterstotheconstructor?{}};否则我将不得不为所有子类编写相同的构造函数,这太烦人了..