我是C++的新手,我有一个关于继承中的c++protected和private成员的问题。如果一个类是public继承了一个基类,protected和private成员变量是否会成为派生类的一部分?例如:classBase{protected:inta;intb;private:intc;intd;public;intq;};classDerived:publicBase{};类Derived是否也有a,b,c,d,q的所有成员?我们可以在Derived类中将inta定义为public、protected和private吗? 最佳答案
在学校和数百个在线视频中,C++继承是通过单个文件教授的;所有类都在main之上声明。我进行了广泛的搜索以找到继承如何与头文件一起工作的单个示例,但我很惊讶以前没有人问过这个问题。C++继承如何与头文件一起工作?每个子类是否需要它自己的扩展基本头文件的新头文件,或者子类定义文件是否可以定义父类(superclass)头文件的函数?此外,抽象类是否会影响上述问题? 最佳答案 在C++中,头文件的内容由预处理器插入到#included的位置。因此,将您正在使用的所有定义放在一个文件中与将这些定义拆分到各个头文件之间没有实质性区别。同样的
我有一个基类,它有一些gui项目,我已经设置了在Qtcreator中使用设计器的位置。这些项目是:QWidget*w1;QWidget*w2;QWidget*w3;现在在继承该基类的类中,我想将这些小部件“转换”为lineEdit项目,这将保留该小部件的所有几何参数。所以我做了这样的事情:QLineEdit*leAmplitude;leAmplitude=newQLineEdit(ui->w1);leAmplitude->setGeometry(ui->w1->geometry());ui->glControls->addWidget(leAmplitude);但是添加的QLineEd
考虑以下代码:#includeclassA{public:virtualvoidf()=0;virtualvoidg()=0;};classB:virtualpublicA{public:virtualvoidf(){g();}};classC:virtualpublicA{public:virtualvoidg(){std::coutf();}以下程序的输出是C::g。编译器如何调用B类的姊妹类的函数?? 最佳答案 N333710.3/9[Note:Theinterpretationofthecallofavirtualfunct
最近看了《ProgrammingLanguagesandPractice》一书中的一些文章,提到Java中的多接口(interface)继承不会像C++中的多类继承一样遇到同样的问题。但我不明白为什么会这样。Java如何能够在C++实现错误存在的情况下使用多接口(interface)继承??有没有办法在C++中替换多重继承以避免实现问题??为了更具体地说明最后一个陈述,假设我们有:classA{...};classB:publicA{...};classC:publicA{...};classD:publicB,publicC{...};然后类D继承类B、C,它们都继承类A。因此,如果
我一直在研究模板和继承,但是在对基类执行强制转换时使用带有模板参数的虚函数成员有些奇怪。他们似乎使用“直接继承”工作,但如果我稍后“推迟”继承则不行。一些代码来说明:例子[1]structCastExBase{virtualvoidf(){}};templatestructCastExA:CastExBase{voidf(){std::cout,protectedCastExB{voidf()override{(static_cast(this))->execF();}voidg()override{(static_cast(this))->g();}};测试用例:CastExBase
我对C++还是很陌生(从Java过来的)。我有一个Actor类型的STL列表。当Actor只包含“真正的”方法时,就没有问题了。我现在想将这个类扩展到几个类,并且需要将一些方法更改为抽象的,因为它们不再像具体的那样有意义。正如我预期的那样(根据文档),这是个坏消息,因为您无法再实例化Actor,因此当我遍历我的列表时,我遇到了问题。C++的方法是什么?如有不明之处请见谅 最佳答案 你不能直接处理这个:正如您所见,当类是抽象类时,您无法实例化对象。由于切片问题,即使类不是抽象的,您也无法将派生对象放入列表中。解决方案是使用指针。所以第
(如果之前有人问过这个问题,我很抱歉;搜索功能似乎已损坏:结果区域完全空白,尽管它说有几页结果……在Chrome、FireFox中,和Safari)所以,我只是在学习C++……而我正在阅读的这本书在以我可以理解的方式解释构造函数方面做得真的很糟糕。到目前为止,我几乎已经了解了所有其他内容,但我无法弄清楚构造函数的语法实际上是如何工作的。例如,我被告知以下将导致构造函数调用指定父类(superclass)的构造函数:classsomething:something_else{something(intfoo,doublebar):something_else(intfoo){}};另一方
我只是在寻找模板的方法,所以尝试了一些东西。让我知道我在这里做错了什么。我正在尝试重载继承的模板虚拟方法。//classtemplates#includeusingnamespacestd;templateclassmypair{Ta,b;public:mypair(Tfirst,Tsecond){a=first;b=second;}virtualAgetmax();};templateAmypair::getmax(){Aretval;retval=a>b?a:b;returnretval;}templateclassnext:publicmypair{Agetmax(){coutm
假设您有一个类树的基类Dep。有一个虚拟方法Dep*Dep::create()我希望每个叶类都实现它。有什么办法可以强制执行此操作吗?注意:这里的问题是可能有中间类(比如classB:publicA:publicDep)通过以下方式实现此方法(A::create)意外或因为他们认为他们是叶类,但实际上他们自己是子类。问题到此结束。上下文如果你好奇我为什么需要这个;我有一个Master类,它具有未知具体类型的Dep对象。如果Master是重复的,我需要拿出Dep实例的匹配克隆。下一个最好的办法是虚拟构造函数惯用语,它恰好引入了这个问题。此外,我什至无法捕捉到这一点(除了可怕的崩溃),因为