有没有办法让通用代码通过基类指针访问派生类的成员?或者还有其他解决方法吗?假设我有一个Shape类。我有继承它的Square和Triangle类。两者都有自己的私有(private)成员,彼此无关,因此将它们放在基类中毫无意义。现在,如果我需要将类写入文件,但直到我需要将类写入文件时才知道该类是方形还是三角形怎么办?我一直在想办法解决这个问题。最坏的解决方案是将Square和Triangle的数据写入一个文件,为读取和写入添加一个标识符(Triangle或Square),并在加载数据时让一个小型解析器将类放在一起。这将是低效和浪费时间的。我想知道是否有一些技巧或设计模式或任何可以帮助解
我正在使用OOD和设计模式创建密码模块。该模块将保留可记录事件的日志并读取/写入文件。我在基类中创建了接口(interface),在派生类中创建了实现。现在我想知道如果一个基类只有一个派生类,这是否有点难闻。这种类层次结构是不必要的吗?现在为了消除类层次结构,我当然可以只在一个类中做所有事情而根本不派生,这是我的代码。classCLogFile{public:CLogFile(void);virtual~CLogFile(void);virtualvoidRead(CStringstrLog)=0;virtualvoidWrite(CStringstrNewMsg)=0;};派生类是:
假设我有一个基类classBase{public:Base();Base(inti,doublej);Base(inti,doublej,charch);virtualvoidprint();private:intm;doublel;charn;};我想派生一个重写打印函数的类,但除此之外与基类完全相同。classDerived:publicBase{public:voidprint();};有没有一种方法可以在派生类上使用基类的所有构造函数,而无需为派生类重写所有构造函数? 最佳答案 自C++11起,您可以为此使用using:cl
来自http://www.parashift.com/c++-faq-lite/basics-of-inheritance.html#faq-19.5Amember(eitherdatamemberormemberfunction)declaredinaprotectedsectionofaclasscanonlybeaccessedbymemberfunctionsandfriendsofthatclass,andbymemberfunctionsandfriendsofderivedclasses那么,如何访问派生类中的protected函数fun呢?#includeusingna
我正在尝试解决一个问题,其中我有一些类,我需要在其中做一些常见的工作,然后是一堆特定于问题的工作,当这完成时,对所有这些类进行一些共同的处理。我有一个基类和派生类,它们都有一个名为Execute的函数。当我调用此函数的派生版本时,我希望能够对Base中的所有派生类执行一些通用处理,然后继续在我的Derived::Execute中执行并返回到Base::Execute完成一些常见的工作。这在C++中可能吗?如何最好地做到这一点?这是一个想法,但它可能不太可行:classBase{public:virtualvoidExecute();};Base::Execute(){//dosomep
这就是我要说的//someguywrotethis,usedasaPolicywithtemplatesstructMyWriter{voidwrite(std::vectorconst&data){//...}};在一些现有的代码中,人们没有使用模板,而是接口(interface)+类型删除classIWriter{public:virtual~IWriter(){}public:virtualvoidwrite(std::vectorconst&data)=0;};其他人想要同时使用这两种方法和写作classMyOwnClass:privateMyWriter,publicIWri
我想将全局qss样式表与派生类一起使用。我知道我必须覆盖paintEvent(stylesheetreference或here)。voidCustomWidget::paintEvent(QPaintEvent*){QStyleOptionopt;opt.init(this);//triedinitFromtoo,sameresult=>notworkingQPainterp(this);style()->drawPrimitive(QStyle::PE_Widget,&opt,&p,this);}然而,它似乎不起作用。使用CDerived:QWidget和我面对的以下样式表行:CDe
我基本上有一个std::integral_constant的模拟版本包含一个变量,我想为这些派生自Base的类专门化一个函数模板,像这样:templatestructBase{typedefTtype;Tt;};templatestructA:Base{staticconstexprTvalue=1;};templatestructB:Base{staticconstexprTvalue=2;};structUnrelated{};//etc.templatevoidfoo(Tt){//IwouldliketospecializefooforAandBandhaveaversionfo
我正在尝试从模板中公开派生一个类,这将使它从基类继承并获得对protected成员的访问权限。但是在模板展开之前它没有这些权限,所以它不能使用Base成员作为模板参数:usingFun=void(*)();classBase{protected://friendclassDerived;//...needthistoeliminatecomplaintstaticvoidsomething();};templateclassVariant:publicBase{};classDerived:publicVariant{//`something()`isprotectedpublic:v
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Howtoforcechildsamevirtualfunctioncallitsparentvirtualfunctionfirst我有一个类层次结构,其中每个派生类都会覆盖一个给定的虚函数,并通过调用其父类中的虚函数来启动其实现。目标是让每个派生的实现都得到执行,但我不喜欢我这样做的方式。比如我有这个类:classbase{public:voiddo_stuff(){do_something();}virtualvoiddo_something(){}};然后我在几个层次上派生这个类:classderiv