草庐IT

继承权

全部标签

c++ - 默认复制构造函数和复杂的继承层次

如果我们假设我们有这样的类层次结构:A1)如果我在B中实现了一个拷贝构造函数,是否一定要在B的实现中调用A的拷贝构造函数?2)C的默认复制构造函数会调用我在B中实现的复制构造函数吗? 最佳答案 不一定,但这是一种很好的做法。它不会被自动调用。您还可以调用一些其他构造函数(或不调用,在这种情况下调用默认构造函数)并执行任何您想做的事情,尽管调用基本复制构造函数是惯用的做法。是的,会的。 关于c++-默认复制构造函数和复杂的继承层次,我们在StackOverflow上找到一个类似的问题:

c++ - std::find 用于继承对象 C++

1.所以我有:ClassA;ClassB:publicA;ClassC:publicB;2.还有一个B类型的指针vector:vectorvec;3.然后:C*ptr=newC();vec.push_back(ptr);那么问题来了,这样用std::find靠谱吗?std::find(vec.begin(),vec.end(),prt);此外,使用this->指针进行搜索可以吗?std::find(vec.begin(),vec.end(),this);//insideofatypeCobject提前致谢。 最佳答案 是的,这是安全

c++ - 继承:将 derived& 作为 arg 传递给期望 base& 的函数

考虑这个示例代码:#includeclassbase{public:base(){std::cout为什么调用base::base(constbase&)没问题,但是调用derived::derived(constbase&)不是?两者都需要一个基本引用,并且都被赋予一个派生引用。我的理解是派生"is"基础。为什么编译器坚持使用derived::derived(constderived&)而它在提供时使用base::base(constbase&)没有问题引用派生类型的对象? 最佳答案 显然,“删除”其中一项默认内容并没有实际完全删

c++ - 使用 protected 继承

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。在准备考试时,我正在看一份旧考试,有一个问题我找不到答案。我没有正确的答案,我的老师已经MIA一段时间了。问题原来不是英文的。假设类CI继承自类Sup,如:classCI:protectedSup{。为什么这不是分类继承?

c++ - 为什么虚基多重继承只调用基类默认构造函数?

这个问题在这里已经有了答案:c++virtualinheritance(3个答案)关闭9年前。在多重继承中,我有一个虚拟的Base类,它被类A和类B继承。A和B是AB的基类。请看下面的代码。在A和B的构造函数中,调用了Base(string)构造函数。我期待得到以下输出:Base::Base(std::string)A::A()B::B()但我得到以下输出:Base::Base()A::A()B::B()为什么要调用Base的默认构造函数?#include#includeusingnamespacestd;classBase{public:Base(){cout

c++ - 继承基于模板的数据结构有什么好处?

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭9年前。Improvethisquestion下面我将进入正题并进行解释。如果有的话,...的好处是什么templateclassmyStack:publicmyList...//mystack结束template>classstack...//C++stack最近我在编写一些代码时遇到了一个继承问题,在这个问题中我暴露了基类的一些我不想暴露的方面。具体的例子并不重要,所以我会把它与几个学期前联系起来,当时我参加了一个数据结构类(cl

c++ - 将 list<A*> 转换为 list<B*> ,其中 B 继承 A

我有一个函数voiddoSomething(listlist1,listlist2)和类classB:AclassC:A有没有直接调用函数的方式voiddoSomething(listlistOfB,listlistOfC)还是我必须像手动包装它一样voiddoSomething(listlistOfB,listlistOfC){listl1;listl2;for(B*b:listOfB)l1.insert(b);for(C*c:listOfC)l2.insert(c);doSomething(l1,l2);//callingthefunctiontakingsupertype}我尝试

c++ - 递归模板继承代码重复

#includetemplatestructmy_iterator;templatestructmy_iterator{T*p;};templatestructmy_iterator:my_iterator{static_assert((S&(S-1))==0,"Smustbeapowerof2");usingmy_iterator::p;unsignedburp(){return(*p)+S;}};intmain(){intv=10;my_iteratora;a.p=&v;std::cout&b=a;std::coutc;c.p=&v;std::cout这将修复错误:template

C++ 隐式和显式继承构造函数调用

我有一个关于对基本构造函数的隐式和显式调用的问题。如果我们有这样的类层次结构:classPerson{protected:std::stringm_name;public:Person(std::string&_name):m_name(_name){std::cout根据我的讲义,主要是对'Baby'的调用,如下所示:std::stringbabyname="Robert";intnappies=5;Babybaby(babyname,nappies);导致以下情况发生:当在Baby的初始化列表中对Person进行显式调用时:Baby的初始化列表被调用,no_of_nappies被初

C++虚方法的虚继承

structA{virtualvoidfoo(){std::cout所以这个在编译时给了我们以下错误:\main.cpp:16:8:error:nouniquefinaloverriderfor'virtualvoidA::foo()'in'D'structD:publicB,publicC{如果我们让B和C结构的继承成为非虚拟的,代码正在编译就没有任何错误(当然,如果我们调用dd.foo()).那么有什么区别呢?为什么我们虚拟继承我们的类会出错,而直接继承却不会出错? 最佳答案 使A成为B和C的虚拟基类确保D恰好包含一个A子对象[