草庐IT

继承权

全部标签

C++ 继承具有不同默认参数值的函数

我想继承一个成员函数而不重新定义它,但给它不同的默认值。我该怎么办?classBase{public:voidfoo(intval){value=val;};protected:intvalue;};classDerived:publicBase{public:voidfoo(intval=10);};classDerived2:publicBase{public:voidfoo(intval=20);};voidmain(){Deriveda;a.foo();//setthevaluefieldofato10Derived2b;b.foo();//setthevaluefieldof

c++ - 函数成员中的 enable_if 用于 void 和继承

我试图理解为什么这段代码无法编译://test.hstructBase{virtual~Base{};virtualvoidexecute(){}virtualvoidexecute(int){}virtualvoidexecute(double){}}templatestructTest:Base{voidexecute(typenamestd::enable_if::value,void>::type){//DoA}voidexecute(typenamestd::enable_if::value,int>::typet){//DoB}};//main.cppTestt;我收到编译

c++ - ostream/ofstream 继承问题

我正在编写C++程序,我需要一些帮助来理解错误。默认情况下,我的程序会打印到终端(STDOUT)。但是,如果用户提供文件名,程序将打印到该文件。如果我正在写入终端,我将使用std::cout对象,而如果我正在写入一个文件,我将创建并使用std::ofstream对象。但是,我不想一直检查我是否应该写入终端或文件。由于std::cout和std::ofstream对象都继承自std::ostream类,我想我会创建一种接受std::ostream对象的print_output函数。在调用此函数之前,我会检查是否应该打印到文件中。如果是这样,我将创建std::ofstream对象并将其传递

c++ - 继承静态变量成员,但分别共享给每一种继承类

如果类继承了带有静态变量成员的基类,将是它们唯一的一个成员,与所有继承的类共享。我有几种继承类,每一种都有很多实例。我希望每个继承类都有一个单独的静态成员,并与其所有实例共享。如何实现?谢谢,抱歉我的英语不好。编辑:classa{staticintvar;};classb::a{};classc::a{};现在,我希望b的所有实例都具有相同的var,并且c的所有实例都具有相同的var,但是varb的>将不同于c的var。我再次对我的英语感到抱歉,如果你能纠正我,请纠正我。 最佳答案 您可以使用CRTP解决这个问题:structYou

c++ - 使用 SFINAE 检测同类继承

我正在尝试编写一个元函数来检查作为可变参数模板参数传递的所有类型是否不同。执行此操作的最高效方法似乎是从一组类继承并检测是否存在错误。问题是以下代码编译失败,而我希望SFINAE可以工作。编辑。问题不是“如何编写该元函数”,而是“我如何捕获双重继承错误并在它发生时输出false_type”。AFAIK,只有SFINAE才有可能。templatestructdummy{};//error:duplicatebasetype‘dummy’invalidtemplatestructfail:dummy,dummy{};templatetrue_typetest(faila=fail());f

c++ - 在继承 : Can I override base class data members?

假设我有如下两个类:ClassA{public:..private:intlength;}ClassB:publicClassA{public:..private:floatlength;}我想知道的是:是否允许覆盖基类数据成员?如果是,这是一种好的做法吗?如果不是,扩展类数据成员类型的最佳方法是什么?有一个类满足了我的需求,我想重用它。但是为了我的程序需要,它的数据成员应该是另一种类型。我有一些书,但它们都只涉及重写基类成员方法。 最佳答案 您可以使用模板化成员,即通用成员,而不是覆盖成员。您还可以声明一个类似union的VARI

c++ - QObject 继承 Ambiguous Base

我有一个简单的类,它在我的程序获得和失去焦点时停止和启动计时器,但它给出了错误,即QObject在每个信号槽连接上都是MyApp的模糊基础。相关代码如下:classMyApp:publicQApplication,publicQObject{Q_OBJECT...}这是我的(凌乱的)Main.cpp:#include#include"qmlapplicationviewer.h"#include#include#include#include#include"timecontrol.h"#include"scorecontrol.h"#include"Retry.h"#include#

c++ - 模板 <typename T> 中的 T 可以使用继承吗?

我想做这样的事情:templateaddTri(Tv1,Tv2,Tv3){//Takev1.pos,v2.pos,v3.posandcreateageometricrepn..Triangletri(v1.pos,v2.pos,v3.pos);//allverticeswill//havetohavea.posmember.//Createthevertexbuffer..VertexBuffervb...}因为那行不通,这是我的解决方法..templateaddTri(Tv1,Tv2,Tv3){Vertex*p1=(Vertex*)&v1;//Thisisavery"shutupC+

c++ - 私有(private)继承和组合,哪个最好,为什么?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭2年前。Improvethisquestion假设我有一个类engin并且我从engin类继承了一个类carclassengin{public:engin(intnobofcylinders);voidstart();};classcar:privateengin{public:car():e(8){}voidstart(){e.start();}private:engine;};现在同样可以通过组合来完成,问题是哪种方法最好并且主要

java - 继承 Java 集合接口(interface)(Set、Map、List 等)的 C++ 等价物是什么?或者扩展 AbstractCollection?

我已经开始使用C++编写代码,来自Java背景(实际上我在我的大学学习了C++,但我们从未接触过STL等)无论如何,我已经到了在各种集合中排列数据的地步,我立即告诉自己“好吧,这是一种集合;这是一个列表,或者一个ArrayList;这是一张map等等。”在Java中,我会简单地让我正在编写的任何类实现Set或Map或List接口(interface);但我可能不会去继承ArrayList或HashSet或其他什么,那里的实现有点涉及,我不想把它们搞砸。现在,我要用C++(使用标准库)做什么?似乎没有Sets、Maps、Lists等的抽象基类——相当于Java接口(interface);