草庐IT

Inheritance

全部标签

C++:模板化继承递归类:不可能的三重威胁?

因此,假设您有一个递归的基类(例如链表)和一个派生类。派生类应该重用基类的构造函数,因为你不想写冗余代码。您可以尝试显而易见的事情,但它不会起作用:classBase{public:Base(intsize){if(sizeprint();}}protected:Base*next;};classDerived:publicBase{public:Derived(intsize):Base(size){}voidprint(){coutprint();}}};intmain(){Derivedd2(5);d2.print();cout这行不通-当您实例化Derived时,它会构造一个D

c++ - 多重继承类的复制构造函数

考虑这段代码:#include#includeusingnamespacestd;classBase{char_type;public:Base(chartype):_type(type){}~Base(){coutv;Baseb('b');Childc;v.push_back(b);v.push_back(c);return0;}我系统的输出是:Basedestructor:bChilddestructorBasedestructor:cBasedestructor:bBasedestructor:bBasedestructor:c我的问题是:为什么Base(b类型)的析构函数被调用

c++ - 指针向下转换和向上转换的用法区别?

我想知道当我们使用向下转换和向上转换时,指针转换到底发生了什么。我有两个问题。其中前2个是评论。Q3终于结束了。#includeusingnamespacestd;classA{public:virtualvoidf(){coutf();pb->f();paUpcast->f();pbDowncast->f();return1;}问题3:我想总结一个规则来推断如果我们将虚函数和指针一起使用会发生什么,但我就是想不通。本来我以为虚函数会把我们带到指针真正指向的地方。因此,当我们输入A*paUpcast=newB();paUpcast->f();如果A.f()是虚函数,第二行会显示“B”,

c++ - 返回子类的 const 引用

我所知道的我知道返回临时对象的const引用是可以的!(像这个例子:)classA{public:virtualconstA&clone(){return(A());}virtualstd::stringname()const{return("A");}};Returningtemporaryobjectandbindingtoconstreference但是!如果我想这样做,它仍然是正确的:classB:publicA{public:virtualconstA&clone(){return(B());}virtualstd::stringname()const{return("B")

c++ - 对于重载函数,调用父子实例的专用版本

我问了一个question早些时候,但事实证明我的问题没有通过我的示例正确建模。所以这是我的实际问题:我有A类和继承自A的B类,我有两个函数foo(A&)和foo(B&),我有一个A*指针列表,其中包含A和B的实例。如何为A的实例调用foo(A&)并为B的实例调用foo(B&)?约束:我可以修改A和B的实现,但不能修改foo的实现。看下面的例子:#include#includeclassA{public:};classB:publicA{public:};voidbar(A&a){std::coutl;l.push_back(newB());l.push_back(newB());fo

c++ - 如何在 C++ 中强制使用奇怪的重复模板模式

我有以下基本模板类。templateclassBase{public:voiddo_something(){}};它旨在用作奇怪地重复出现的模板模式。它应该像classB:publicBase一样被继承.它必须不像classB:publicBase一样被继承.我想静态地执行这个要求。如果有人使用错误,我预计会在编译阶段出现错误。我正在做的是放置一个static_cast(*this)在do_something().这样,继承模板的类就是或继承自作为模板参数提供的类。对不起,令人困惑的表达。用简单的英语来说,它需要B是或继承自SomeoneElse在classB:publicBase.我

C++ 结构继承

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭5年前。Improvethisquestion据我所知,C++中类和结构的主要区别(可能是唯一的区别)是类的成员默认为私有(private),而结构的成员默认为公共(public)。但是,可能因为我以前是C语言开发人员,我仍然继续声明结构以仅包含“公共(public)”字段,并且我几乎从不声明方法(初始化成员的构造函数除外)。我还想利用结构的C++继承。我的问题是:即使语言允许,继承结构是否是一种好的做法?是否可以阻止结构声明虚方法,

c++ - 覆盖或删除继承的构造函数

这是一些C++代码:#includeusingnamespacestd;classm{public:m(){cout这是输出:mothermotherdaughter我的问题是我不希望在创建N时调用m的构造函数。我该怎么办? 最佳答案 据我所知,您不能删除继承的构造函数。您示例中的问题来自不正确的类设计。构造函数通常用于分配类资源、设置默认值等。不太适合用来输出东西。你应该把n(){cout进入虚函数。一般来说——如果您需要删除继承的构造函数,那么您可能需要重新考虑/重新设计您的类层次结构。

c++ - 实现基类比较的正确方法是什么?

我有一个基类classAnimal具有纯虚函数和一组派生类classMonkey:publicAnimalclassSnake:publicAnimal我想实现一个比较操作,这样,如果我在我的代码中遇到两个指向Animals的指针Animal*animal1Animal*animal2我可以将它们相互比较。如果animal1和animal2属于不同的派生类,比较结果应该是false。如果它们属于同一个派生类,则应返回比较运算符的输出。有人能告诉我实现这个的好方法吗? 最佳答案 哇,很多其他答案完全没有必要。dynamic_cast-

c++ - 基模板类数据成员在派生模板类中不可见?

考虑以下C++代码,templatestructA{boolusable_;};templatestructB:A>{voidfoo(){usable_=false;}};structC:B{voidfoo(){usable_=true;}};intmain(){Cc;}我遇到编译错误:在成员函数中voidB::foo():template_inherit.cpp:12:error:'usable_'wasnotdeclaredinthisscope.这是为什么呢?有什么好的解决方法吗? 最佳答案 那是因为usable_是一个非依赖