operator-overloading相关内容

在 Fortran 重载赋值中检查自赋值

我正在尝试使用 fortran 2003 实现一个多项式类,其中包含重载的算术运算和赋值.派生类型维护术语定义和系数的可分配列表,如下所示 类型多项式私人的类型(单项式)、维度(:)、可分配的 :: 项双精度,维度(:),可分配的 :: coef整数 :: nterms=0包含...结束类型多项式接口分配(=)模块过程:: polynomial_assignment终端接口...包含基本子程序 ..
发布时间:2021-11-30 12:33:16 其他开发

带下标运算符的重载赋值运算符

我重载了下标运算符和赋值运算符,我正在尝试为赋值运算符获取正确的值例子数组 x;x[0]=5;通过重载下标运算符,我可以获得值 0,但是当我重载赋值运算符时,它会进行赋值,但它不使用我的重载函数,因为变量 2 应该具有值 5. 类数组{民众:int *ptr;一、二;数组(int arr[]){ptr=arr;}int &operator[](int 索引){一个=索引;返回 ptr[索引];} ..

将赋值运算符标记为仅左值是否可以提高安全性?

如果T是一个带有默认赋值运算符签名的类类型,那么我们可以这样写: T const &ref = ( T{} = something ); 创建一个悬空引用.但是,带有签名: T &operator=(T t) & 上面带有悬空引用的代码将无法编译.这将防止我们返回指定临时对象的左值的某些情况——不希望出现的情况,因为它们可能导致悬空引用. 有什么理由不这样做吗?我们会禁用赋值运算符的 ..
发布时间:2021-11-30 12:30:06 C/C++开发

C++ 为什么赋值运算符应该返回一个 const ref 以避免 (a=b)=c

我正在阅读一本关于 C++ 的书,更准确地说是关于运算符重载的书. 示例如下: const Array &Array::operator=(const Array &right){//检查自赋值//如果不是自赋值,则进行复制返回 *this;//启用x=y=z} 书中关于返回const ref而不是ref的解释是为了避免诸如(x=y)=z之类的赋值.我不明白为什么我们应该避免这种情况.我 ..
发布时间:2021-11-30 12:29:05 C/C++开发

C++ 中的重载赋值运算符

据我所知,当重载 operator= 时,返回值应该是非常量引用. A& A::operator=( const A& ){//检查自赋值,做赋值返回 *this;} 在以下情况下允许调用非常量成员函数是非常量的: ( a = b ).f(); 但是为什么要返回一个引用呢?如果返回值没有声明为引用,在什么情况下会出现问题,比如说按值返回? 假设复制构造函数已正确实现. 解决方案 ..
发布时间:2021-11-30 12:28:29 C/C++开发

为什么赋值运算符应该返回对对象的引用?

我正在对我的 C++ 进行一些修订,我正在处理运算符重载,特别是“="(赋值)运算符.我在网上查找并遇到了多个讨论它的主题.在我自己的笔记中,我把我所有的例子都记为类似 class Foo{民众:整数 x;输入 y;void operator=(const Foo&);};void Foo::operator=(const Foo &rhs){x = rhs.x;y = rhs.y;} 在我在 ..

一个图书馆迫使我对新/删除的全局过载!

我正在为一个大型闭源应用程序维护一个插件(作为 dll 实现).这多年来一直运作良好.然而,随着 SDK 的最新更新,供应商超载了全局操作符 new 和 delete.这给我带来了很多麻烦.发生的情况是我的插件分配了一个字符串.我将此字符串传递到静态链接库中,该库对其进行修改(更改其长度从而重新分配它).我的应用程序崩溃了. 原因当然是字符串存在于供应商分配的自定义堆上.静态链接库对该堆一无 ..

c ++运算符重载的多态性

如何使纯虚函数成为 operator+();功能.我在基类中喜欢这个int 运算符+()=0;编译器给出错误.在派生类 operator+() 函数中编译器说派生类不能 make .因为下面的类是抽象的我知道我不能创建抽象类的对象,但现在我尝试创建派生类对象. 这是代码 #include 使用命名空间标准;类 ana {保护:整数 x;民众 :virtual int operator+() ..
发布时间:2021-11-26 17:15:12 C/C++开发

C# 中是否有任何方法可以在派生类中强制执行运算符重载?

我需要定义一个接口,它必须对实现它的类型强制执行某些运算符重载.似乎没有明显的方法可以做到这一点,因为必须使用类中的静态方法来完成运算符重载.有没有办法达到同样的效果(使用抽象类或其他任何东西)? 解决方案 有点小技巧,但是... 您可以在基类中提供运算符重载,然后在其中一个类中调用一些已发布的抽象方法来完成工作. 公共抽象类MyClass{公共静态 MyClass 运算符 +(M ..
发布时间:2021-11-26 17:13:00 C#/.NET

`+=` 的 C# 运算符重载?

我正在尝试为 += 执行运算符重载,但我不能.我只能为 + 做一个运算符重载. 怎么会? 编辑 这不起作用的原因是我有一个 Vector 类(带有 X 和 Y 字段).考虑以下示例. vector1 += vector2; 如果我的运算符重载设置为: public static Vector operator +(Vector left, Vector right){ret ..
发布时间:2021-11-26 10:43:25 C#/.NET

为什么 Java 不提供运算符重载?

从 C++ 到 Java,明显没有答案的问题是为什么 Java 不包括运算符重载? 不是复杂的a, b, c;a = b + c; 比 复杂的 a, b, c; 简单得多a = b.add(c);? 是否有一个已知的原因,不允许运算符重载的有效参数?原因是随意的,还是时间错了? 解决方案 假设您想覆盖由 a 引用的对象的先前值,则必须调用成员函数. 复数a, b, c;//. ..
发布时间:2021-11-25 13:00:03 Java开发

Java中的运算符重载

请您告诉我是否可以在 Java 中重载运算符?如果它在 Java 中的任何地方使用,请告诉我. 解决方案 不,Java 不支持用户定义的运算符重载.Java 接近“自定义"运算符重载的唯一方面是对字符串的 + 处理,这会导致常量的编译时连接或使用 StringBuilder/StringBuffer 的执行时连接.但是,您无法定义自己的操作符,它们的行为方式相同. 对于确实支持运算符 ..
发布时间:2021-11-25 11:34:03 Java开发

c ++运算符重载的多态性

如何使纯虚函数成为 operator+();功能.我在基类中喜欢这个int 运算符+()=0;编译器给出错误.在派生类 operator+() 函数中编译器说派生类不能 make .因为下面的类是抽象的我知道我不能创建抽象类的对象,但现在我尝试创建派生类对象. 这是代码 #include 使用命名空间标准;类 ana {保护:整数 x;民众 :virtual int operator+() ..
发布时间:2021-11-25 09:46:08 C/C++开发

C# 中是否有任何方法可以在派生类中强制执行运算符重载?

我需要定义一个接口,它必须对实现它的类型强制执行某些运算符重载.似乎没有明显的方法可以做到这一点,因为必须使用类中的静态方法来完成运算符重载.有没有办法达到同样的效果(使用抽象类或其他任何东西)? 解决方案 有点小技巧,但是... 您可以在基类中提供运算符重载,然后在其中一个类中调用一些已发布的抽象方法来完成工作. 公共抽象类MyClass{公共静态 MyClass 运算符 +(M ..
发布时间:2021-11-25 09:43:55 C#/.NET