首页 > TAG信息列表 > object-slicing

c – 参考和对象切片

我没有我的有效C,这让我非常烦恼,所以我必须要求自己的理智.特定 class Foo : public Bar{} void MyFunc(Bar &_input); 如果我传入一个Foo,我是否与slicing问题纠缠在一起还是我避免了它?解决方法:不是问题,因为你传递了一个引用.您不是要创建新对象,只是让MyFunc访问原始对象.

c – 异常切片 – 这是由于生成的拷贝构造函数?

我刚刚在代码中修复了一个非常微妙的错误,这是由异常切片造成的,我现在想确保我完全理解发生了什么. 这是我们的基本异常类,派生类和相关函数: class Exception { public: // construction Exception(int code, const char* format="", ...); virtual ~Exception(void); <

C多态性和切片

打印出以下代码 Derived Base Base 但我需要将每个Derived对象放入User :: items,调用自己的print函数,而不是基类.我可以在不使用指针的情况下实现吗?如果不可能,我应该如何编写逐个删除User :: items并释放内存的函数,以免出现任何内存泄漏? #include <iostream> #include <vect

c – 允许operator =仅在同一类的对象之间使用?

我有一个类层次结构,我想禁止这样做: Foo *f = new Foo(); Bar *b = new Bar(); f = b; 其中Foo是Bar的超类.这样做会切割对象的Bar部分.我知道你可以通过使operator = private来解决这个问题,但是如果它们属于不同的类型,是否可以禁止使用赋值运算符? 就像使operator = private但

C:对象切片和异常

在一次采访中,我被问到为什么按价值捕获异常可能是一个问题,我回答说这会导致对象切片.这就是我在互联网上找到的,例如:https://www.viva64.com/en/w/v746/ 但是现在我正在尝试进行实验,但是在按值捕获时我找不到切片的示例.切片的常规场景(不是例外)是这样的: Derived d1; Derived

c – 堆栈对象的动态转换失败

前几天我遇到了一个实例,我有一个函数,它指向一个基类型,然后我需要向上转换为派生类型以访问一些额外的功能.但是,dynamic_cast失败了,这很奇怪,因为我的类型肯定继承了基类型. 为了了解正在发生的事情的底部,我创建了以下测试程序,我认为复制了我所看到的: void cast(TestClass *

c – 防止在复制构造函数中切片

我想复制Foo对象类型的向量,但对象可以是几种不同的Foo派生类型.我无法弄清楚如何复制而不切片.这是我的玩具代码 #include "stdafx.h" #include <memory> #include <vector> #include <string> #include <iostream> class Foo { public: Foo() { m_x = "abc"; } Foo( c

C#vs C – 类型,继承和vtable

我无法理解导致C和C#之间差异的原因. 首先,我们有一个基类包含虚函数的示例. class Base { protected: int super; public: virtual int f() = 0; }; class Derived : public Base { public: int extraA; int f(){ return 1; } }; int main() { Derived *d