草庐IT

Inheritance

全部标签

c++ - 将 std::unique_ptr 传递给类时出错

我必须创建从抽象类继承的类的实例。我的代码非常简单。它应该基于抽象类创建对象类的实例。抽象类也是模板类。然后我需要将这个对象放入保存指向该对象的指针的存储类中。传递指针时出现错误:templates.cpp:Inmemberfunction‘voidstorage::setPTR(std::unique_ptr&)’:templates.cpp:39:28:error:useofdeletedfunction‘std::unique_ptr&std::unique_ptr::operator=(conststd::unique_ptr&)[with_Tp=child;_Dp=std::

c++ - 在接口(interface)不是时标记派生实现 noexcept 的副作用是什么

我们有一个实现IUnknown(或我们不拥有的任何接口(interface))的类。我们开始用noexcept标记我们的大部分/所有方法以进行任何潜在的优化,因为我们无论如何都不会抛出任何异常;尽管我们依赖的一些库可能。提出了QueryInterface/AddRef/Release是否应该标记为noexcept的问题,因为接口(interface)不是。当只有一些派生类被标记为noexcept时,是否有任何副作用或问题? 最佳答案 一般来说,您应该小心使用noexcept。除非编译器可以证明该函数确实不会抛出任何异常,否则它必须插

c++ - 从 stdexcept 类继承时为 "Undefined Symbols"

这是在中定义的异常:classlength_error:publiclogic_error{public:explicitlength_error(conststring&__arg);};这是我的异常(exception)情况:#include#includeusingnamespacestd;classrpn_expression_error:publiclogic_error{public:explicitrpn_expression_error(conststring&__arg);};为什么在时会出现此错误?不是吗?Undefinedsymbols:rpn_expressio

c++ - 调用基类构造函数

在下面的程序中,是行Derived(doubley):Base(),y_(y)正确/允许?也就是说,它是否遵循ANSI规则?#includeclassBase{public:Base():x_(0){std::cout 最佳答案 这是允许的,但没有意义,因为编译器会为您进行调用。不过,恐怕我今天早上不想做标准拖网。 关于c++-调用基类构造函数,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/ques

c++ - 通过组合添加类功能

假设我们有一个抽象类Element,Triangle和Quadrilateral都派生自该抽象类。假设这些类与依赖于元素形状的插值方法结合使用。因此,基本上我们创建了一个抽象类InterpolationElement,我们从中派生了InterpolationTriangle和InterpolationQuadrilateral。然后,为了在Triangle和Quadrilateral类中包含插值功能,我们在类的Element中添加一个常量引用数据成员键入InterpolationElement,即:classElement{public:Element(constInterpolati

c++ - 虚函数重定义隐藏了另一个基类的同名重载函数

好的,我正在使用虚函数、重载函数和多重继承。当然,结果并不好。场景:类base1有一个需要由其子类指定的虚函数。类derived派生自两个父类base1和base2,应该使用base2的现有功能来定义base1的虚函数。这没关系,但当然很尴尬。动机是我无法更改类base2并且已经投入大量资金的现有接口(interface)具有同名的base1和base2类函数。没关系,base1中没有实现任何内容,它应该只是重定向到base2。我的问题出现是因为base2有几个与所讨论的虚函数同名的重载函数。所有其他重载版本在编译时基本上都被隐藏了。这是一个小的演示代码。//thisversiondo

c++ - 在 C++ 中停止或阻止继​​承

我会阻止子类重写基方法,并让子类重写父类中的新方法。换句话说,基类的子类阻塞了基类的方法并委托(delegate)给一个新的方法,进一步的子类必须重写该方法。我仍然希望基类方法可用。这是一个例子:#include#includestructBase{virtualconststd::string&class_name(void)=0;};structLevel1:publicBase{private://Preventchildclassesfromoverriding//theBase::class_namemethodconststd::string&class_name(void

c++ - 智能指针 : cast between base and derived classes

假设你有这样一个函数:SmartPtrdoSomething(SmartPtra);像这样的类:classA{}classB:publicA{}现在我这样做:SmartPtrfoo=newB();doSomething(foo);现在,我想取回一个SmartPtr来自doSomething的对象.SmartPtrb=doSomething(foo);这可能吗?我需要做什么样的选角?现在,我刚发现一些我认为丑陋的东西:B*b=(B*)doSomething().get()重要说明:我无权访问SmartPtr和doSomething()代码。 最佳答案

C++:将构造对象的引用传递给构造的成员对象?

好的,考虑以下类:classObject{public://ConstructorObject():[InitializationList]{...}...};classContainer{public:ObjectA;ObjectB;....Container():[InitializationList]{}};我想向对象提供[对容器及其成员的访问权]。我的第一个想法是以某种方式将对当前容器对象的引用传递给对象的构造函数。但我不知道该怎么做。我搞砸了“这个”,但我没有得到任何有用的东西。我试过这样的事情:classObject{public:Container&c//Construc

具有不同成员的 C++ 结构 - 在运行时决定

我有以下情况。下面附上伪代码。我有一个A类,它有一个D或E类型的对象c,这会有所不同(实际上是随机决定的)。它使用b作为与远程计算机通信的消息。那么,我应该如何让结构B具有不同的变量(在本例中为float或double)?另外,当我打开一个套接字并传输一个对象时,该对象现在将具有不同的大小。远程计算机不知道对象的大小是否对应于sizeof(int)+sizeof(float)或sizeof(int)+sizeof(double)。我需要将大小作为参数来接收数据包,那么我该如何解决呢?代码:classC{...};classD:publicC{...};classE:publicC{..