草庐IT

派生词

全部标签

c++ - 基类和派生类中的同名对象不会被标记为错误

classBase{public:type1m_Pants;};classDerived:Base{public:type2m_Pants};这基本上没有被标记为错误,但在整个项目中造成了各种破坏和问题。有谁知道不会标记这个的技术问题? 最佳答案 它不会被标记为错误,因为它不是错误。没有任何内容表明派生类中的成员不能与基类中的成员同名。如果您有一个类型为Derived的对象obj,那么obj.m_Pants指的是m_Pants派生。如果你想引用基本成员,你可以使用obj.Base::m_Pants来实现。如果您在Base的成员函数中

C++ 重载基于 shared_ptr 派生类的函数

有很多与此类似的SO问题,但我无法准确找到我要找的内容。如果这是重复的,我很抱歉。我有一个Parent类和继承自它的两个派生类:classSon:publicParent{...};classDaughter:publicParent{...};然后我声明两个shared_ptr到基类,并用shared_ptr实例化它们对于每个派生类:shared_ptrson=shared_ptr(newSon());shared_ptrdaughter=shared_ptr(newDaughter());最后,我想要一个处理shared_ptr的类基于它指向哪个派生类。问题是我可以使用函数重载来实

c++ - 为什么派生类函数参数采用基类函数参数的值?

我正在研究C++。以下是我的代码:#includeusingnamespacestd;classbase{public:virtualvoiddisplay(inta=4){coutdisplay();return0;}输出是:Derived::64调用基类函数,但使用派生函数参数的默认值。为什么派生类方法display(),取基类方法参数值? 最佳答案 因为您是通过指向base的指针来调用它的。这就是它的工作原理。在实际调用之前,将参数压入参数堆栈(或内部寄存器)。因为您有一个指向base的指针并且没有参数,所以默认的4被传递给该

c++ - 如何实现 boost::variant 派生类?

我已经尝试了几个小时来编写一个派生自boost::variant的类。但是我不明白这是什么问题(我不明白编译错误是什么意思)。实现干净的boost::variant派生类的规则是什么?#includeclassMyVariant:publicboost::variant{public:MyVariant():boost::variant(){}templateMyVariant(T&v):boost::variant(v){}templateMyVariant(constT&v):boost::variant(v){}};intmain(){MyVarianta;MyVariantb=

【Linux】Linux进程控制 --- 进程创建、终止、等待、替换、shell派生子进程的理解…

柴犬:你好啊,屏幕前的大帅哥or大美女,和我一起享受美好的今天叭😃😃😃文章目录一、进程创建1.调用fork之后,内核都做了什么?2.如何理解fork函数有两个返回值?3.如何理解fork返回之后,给父进程返回子进程的pid,而给子进程返回0?4.如何理解一个id变量,怎么能保存两个值,并且if和elseif语句同时执行?5.fork常规用法&&fork调用失败的原因二、进程终止(进程退出的三种情况)1.退出码(你可以不关心进程退出信息,但OS不能不提供获取信息的方式)2.进程如何退出(return、exit()、_exit())三、进程等待(回收子进程所有资源,读取子进程退出信息)1.wait

c++ - 连接到派生类中的 protected 插槽

这是基类中声明的样子:protected:voidindexAll();voidcleanAll();在派生类中,以下不编译:indexAll();//OKconnect(&_timer,&QTimer::timeout,this,&FileIndex::indexAll);//ERRORconnect(&_timer,SIGNAL(timeout()),this,SLOT(indexAll()));//OK我想使用connect的第一个变体,因为它会进行一些编译时检查。为什么会返回错误:error:'voidFiles::FileIndex::indexAll()'isprotect

c++ - 在从 Boost 派生的类派生的类中自动禁止复制是不可复制的吗?

例如:classFoo:boost::noncopyable{//...};classBar:publicFoo{//...};Bar是不可复制的吗? 最佳答案 默认情况下它是不可复制的,除非您创建自定义复制构造函数并避免在那里调用基本复制构造函数。另见Explicitly-defaultedanddeletedspecialmemberfunctions在C++11中引入。尽管将复制构造函数/运算符设为私有(private)可以解决问题,但编译器生成的诊断消息远非漂亮和明显,因此C++11中删除的复制构造函数/运算符可以解决此问题

c++ - 在派生虚函数中强制执行正确的参数类型

我发现这个问题很难简洁地描述,所以我附上了一个演示程序的代码。一般的想法是我们想要一组派生类,这些派生类被迫从基类实现一些抽象的Foo()函数。每个派生的Foo()调用都必须接受不同的参数作为输入,但所有参数也应该从BaseInput类派生。到目前为止,我们看到了两种可能的解决方案,但我们都不太满意:从基类中删除Foo()函数,并在每个派生类中使用正确的输入类型重新实现它。然而,这消除了在每个派生类中以相同方式实现它的强制。在接收函数中进行某种动态转换,以验证接收到的类型是否正确。但是,这并不能防止程序员出错并传递不正确的输入数据类型。我们希望传递给Foo()函数的类型在编译时是正确的

c++ - weak_ptr 是基类的,而 shared_ptr 是派生类的?

我有一个结构来管理从基类派生的对象Entity,但不控制它们的生命周期。我希望这个结构被赋予像weak_ptr这样的弱指针这样它就可以知道该对象是否已在其他地方被销毁。但是,在共享指针所在的管理结构之外,我希望共享指针更具体shared_ptr(SpecificEntity使用Entity作为基类)。有没有什么办法可以做到这一点,或者类似的东西? 最佳答案 很有可能。您可以随时转换shared_ptr到shared_ptr隐含地,对于另一个方向你有std::static_pointer_cast和std::dynamic_point

C++如何从基类调用派生类中的方法

我想要做的是让Execute()运行并完成它调用Base::Done()然后调用Derived::Done()。我这样做是因为Base类Execute会做一些事情,当它完成时调用Derived::Done()。我希望我解释正确。有点像任务完成时调用的监听器。我有点不明白Base类将如何调用Derived类。classBase{virtualvoidDone(intcode){};voidExecute();}voidBase::Execute(){}classDerived:Base{voidDone(intcode);voidRun();}Derived::Done(intcode)