草庐IT

继承权

全部标签

c++ - 属性说明符序列是否继承?

看看这个片段:struct[[nodiscard]]Result{};structDiscardableResult:Result{};DiscardableResult是否有[[nodiscard]]属性?如果是,是否有可能以某种方式将其删除? 最佳答案 [dcl.attr.nodiscard]/2说:Anodiscardcallisafunctioncallexpressionthatcallsafunctionpreviouslydeclarednodiscard,orwhosereturntypeisapossiblycv-

c++ - 为什么 const/non-const 函数重载的继承不明确?

我试图创建两个类,第一个类是函数的非const实现,第二个类是const实现。这是一个小例子:classBase{protected:intsome;};classA:publicvirtualBase{constint&get()const{returnsome;}};classB:publicvirtualBase{int&get(){returnsome;}};classC:publicA,B{};Ctest;test.get();//ambiguous对get函数的调用不明确。不管const版本需要匹配更多的需求。(在constC上调用get也是模棱两可的,但有一个可能的函数可

c++ - 为什么 const/non-const 函数重载的继承不明确?

我试图创建两个类,第一个类是函数的非const实现,第二个类是const实现。这是一个小例子:classBase{protected:intsome;};classA:publicvirtualBase{constint&get()const{returnsome;}};classB:publicvirtualBase{int&get(){returnsome;}};classC:publicA,B{};Ctest;test.get();//ambiguous对get函数的调用不明确。不管const版本需要匹配更多的需求。(在constC上调用get也是模棱两可的,但有一个可能的函数可

c++ - 是否多次调用多个继承的构造函数?

多重继承的构造函数会被多次调用吗?构造函数的调用顺序是什么?这是否取决于继承列表中的顺序?这是一个例子(只是为了说明情况,没有现实生活中的例子)。classBase{};classDerivedBaseOne:publicBase{};classDerivedBaseTwo:publicBase{};classDerived:publicDerivedBaseTwo,publicDerivedBaseOne{};//somewhereinthecode,isBase()calledtwotimeshere?Derived*foo=newDerived();Base()构造函数是否被调用

c++ - 是否多次调用多个继承的构造函数?

多重继承的构造函数会被多次调用吗?构造函数的调用顺序是什么?这是否取决于继承列表中的顺序?这是一个例子(只是为了说明情况,没有现实生活中的例子)。classBase{};classDerivedBaseOne:publicBase{};classDerivedBaseTwo:publicBase{};classDerived:publicDerivedBaseTwo,publicDerivedBaseOne{};//somewhereinthecode,isBase()calledtwotimeshere?Derived*foo=newDerived();Base()构造函数是否被调用

c++ - 菱形继承(钻石问题) (C++)

我知道继承钻石被认为是不好的做法。但是,我有两个案例,我觉得菱形继承(钻石问题)非常适合。我想问一下,你会推荐我在这些情况下使用菱形继承(钻石问题),还是有其他更好的设计。案例1:我想在我的系统中创建代表不同类型“操作”的类。Action按几个参数分类:Action可以是“读”或“写”。Action可以有延迟也可以没有延迟(它不仅仅是一个参数。它会显着改变行为)。Action的“流类型”可以是FlowA或FlowB。我打算有以下设计://abstractclassesclassAction{//methodsrelevantforallactions};classActionRead:

c++ - 菱形继承(钻石问题) (C++)

我知道继承钻石被认为是不好的做法。但是,我有两个案例,我觉得菱形继承(钻石问题)非常适合。我想问一下,你会推荐我在这些情况下使用菱形继承(钻石问题),还是有其他更好的设计。案例1:我想在我的系统中创建代表不同类型“操作”的类。Action按几个参数分类:Action可以是“读”或“写”。Action可以有延迟也可以没有延迟(它不仅仅是一个参数。它会显着改变行为)。Action的“流类型”可以是FlowA或FlowB。我打算有以下设计://abstractclassesclassAction{//methodsrelevantforallactions};classActionRead:

c++ - 重载解析、模板和继承

#includestructA{};structB:publicA{};templatevoidfoo(constT&x){std::cout打印出来:CalledACalledtemplate我的印象是总是会选择合适的非模板函数而不是模板函数。有人可以向我解释导致这个有点令人惊讶的结果的解决步骤吗? 最佳答案 Iwasundertheimpressionthatasuitablenon-templatefunctionwouldalwaysbechosenoveratemplatefunction.这仅在模板和非模板是同样好的候选

c++ - 重载解析、模板和继承

#includestructA{};structB:publicA{};templatevoidfoo(constT&x){std::cout打印出来:CalledACalledtemplate我的印象是总是会选择合适的非模板函数而不是模板函数。有人可以向我解释导致这个有点令人惊讶的结果的解决步骤吗? 最佳答案 Iwasundertheimpressionthatasuitablenon-templatefunctionwouldalwaysbechosenoveratemplatefunction.这仅在模板和非模板是同样好的候选

c++ - 如果存在具有不同参数的继承成员,为什么对 C++ 结构的函数的调用会模棱两可?

代码如下。我的D类中有一个函数f()和一个函数f(int),那么如果两个函数都有不同的参数,为什么这个调用会模棱两可?structA{voidf(){}};structB:virtualA{voidf(inti){}};structC:virtualA{voidf(){}};structD:B,C{};intmain(){Dd;d.f(5);//ambiguous} 最佳答案 这里的问题在于成员名称查找,它发生在评估哪些函数是可行的并应用重载决议之前。当名称查找从两个或多个不相关的基类中找到名称时,这被认为是不明确的查找,立即无效。