草庐IT

派生词

全部标签

c++ - 确保派生类实现静态方法

我想确保派生类实现特定的静态方法。我认为这样做应该可以使用static_assert,std::is_same,decltype,CRTP也许利用SFINAE.然而,similarcode到目前为止,我发现它非常复杂,而且我似乎还没有完全理解它,因此我无法根据自己的需要采用它。目前我试过的是这个templateclassBase{static_assert(std::is_same::value,"ERRORSTRING");};classDerived:publicBase{public:staticintfoo(inti){return42;};};但是,它没有编译告诉我,即使正确

C++:使用 CRTP,派生类中定义的类在基类中不可访问

这是(简化的)基类:templateclassSharedObject{protected:QExplicitlySharedDataPointerd;};这是派生的:classThisWontCompile:publicSharedObject{private:friendclassSharedObject;structData:publicQSharedData{intid;};};是否有从SharedObject访问ThisWontCompile::Data的解决方法?从基础对象派生的对象到底能做什么,不能做什么? 最佳答案

c++ - 编译器何时为派生类生成默认构造函数

这是我的观察:编译器不会为基类定义了构造函数的派生类生成默认构造函数。//exampleclassClassCBase{public:ClassCBase(inti){}};classClassC:publicClassCBase{};intmain(){ClassCc;//errorC2512:'ClassC'://noappropriatedefaultconstructoravailable}Q1>我的理解正确吗?Q2>是否存在编译器不会为派生类生成默认构造函数的其他情况? 最佳答案 如果父类(superclass)没有默认构

c++ - 为什么基指针只能在公共(public)继承下指向派生对象?

我认为这是因为基类数据成员和方法将无法访问,但我想更清楚地了解这一点。另外,这是否就是多态性(使用虚函数)只有在公共(public)继承下才有可能的原因? 最佳答案 实际上,即使基类是私有(private)的,指向基类的指针也可以指向派生类。问题是这样的转换在课外是不可能的。但是,仍然可以在可访问基础的上下文中执行此类转换。例子:#includeusingnamespacestd;structBase{voidfoo()const{coutfoo();}LiveexampleLiveexamplewithvirtualcall

派生类中的 C++ 赋值运算符

这个问题在这里已经有了答案:operator=andfunctionsthatarenotinheritedinC++?(3个答案)关闭7年前。我不太明白为什么派生类在赋值时不调用基类的相应运算符,如果它自己不存在的话。看代码:#includeusingnamespacestd;classA{protected:voidmyWrite(){cout因为它是代码不编译。当然,如果我为B定义一个与A相同的“operator=”,一切正常,但是如果未定义派生类中的B“operator=”,为什么默认情况下不调用它?您能帮助阐明这个问题吗?gcc编译器说../src/tito.cpp:40:4

c++ - 尽管类派生自 QObject,但定义自己的析构函数?

让我们有一个类Test和一个类AnotherClass。两者都派生自QObject。测试.h:classTest:publicQObject{Q_OBJECTpublic:Test(QObject*parent);~Test();private:AnotherClass*other;};classAnotherClass:publicQObject{Q_OBJECTpublic:AnotherClass(QObject*parent);~AnotherClass();};测试.cpp:Test::Test(QObject*parent):QObject(parent){other=ne

c++ - 如何在 C++ 中使用相同的实现正确表达两个派生类函数?

目前,我的情况是我有一些基类和许多子类。子类必须覆盖多个虚方法,但是,有时一个子类中虚方法的实现与另一个子类完全相同。我应该只将实现代码复制并粘贴到另一个子类中,还是有办法同时表达两个子类的实现?下面的代码演示了我的问题。classA{virtualvoidfoo1()=0;virtualvoidfoo2()=0;};classB:publicA{voidfoo1();voidfoo2();};classC:publicA{voidfoo1();voidfoo2();};classD:publicA{voidfoo1();voidfoo2();};voidB::foo1(){//Sam

c++ - typedef 相对于派生类的优势?

简单来说,doingsay和doingsay之间有什么(或有什么)区别classMyClassList:list{};对比typedeflistMyClassList;我能想到的唯一优点(也是它让我想到这个问题的原因)是,对于派生类,我现在可以轻松地将MyClassList声明为classMyClassList;没有编译器错误,而不是classMyClass;typedeflistMyClassList;我想不出有什么区别,但这让我想知道,是否存在可以使用简单派生类不能使用typedef的情况?或者换句话说,我有什么理由不应该更改我所有的typedef列表SomeClassList;到

C++在派生类中初始化基类的const int?

我的基类中有一个常量int变量,我想在我的派生类中用不同的值(作为参数)初始化响应变量,这可能吗?这是我做的://Base.h(methodsimplementedinBase.cppintheactualcode)classBase{public:Base(constintindex):m_index(index){}intgetIndex()const{returnm_index;}private:constintm_index;};//Derived.hclassDerived:publicBase{public:Derived(constintindex,conststd::s

c++ - 如何测试B类是否派生自A类?

更具体地说,假设我有一个带有参数A和B的类模板,并且我希望有一个编译器错误(当模板被实例化时)如果B不是从A派生的。templateclassFoo{//static_assert(BisderivedfromA)}; 最佳答案 这已经被问过很多次了,但是很简单我会再次发布解决方案:~Foo(){A*p=(B*)0;//BisrequiredtobeasubtypeofA} 关于c++-如何测试B类是否派生自A类?,我们在StackOverflow上找到一个类似的问题: