如何从同一个类中的另一个运算符重载成员函数调用运算符重载成员函数(或使用运算符)?

2024-02-01

我正在用 C++ 编写一段代码来处理复数。我也在练习运算符重载。所以我超载了*(乘法运算符),现在我想在我的重载中使用重载运算符/(除法运算符),但是当我使用时*它的显示错误。这是代码:

#include <iostream>
#include <cmath>

using namespace std;

class Imaginary
{
    public:
    //constructors
    Imaginary(double a,double b):x(a),y(b){}
    Imaginary():x(0.0),y(0.0){}

    //setter methods for x and y
    void Setx(double x) { this->x = x; }
    void Sety(double y) { this->y = y; }

    //getter methods for x and y
    double Getx(){return this->x;}
    double Gety(){return this->y;}

    //overloaded operators
    Imaginary operator+(Imaginary&);
    Imaginary operator-(Imaginary&);
    Imaginary operator*(Imaginary&);
    Imaginary operator~();
    Imaginary operator/(Imaginary&);

    void print();
private:
    double x;
    double y;
};

Imaginary Imaginary::operator+(Imaginary &i){
    Imaginary ti;
    ti.Setx(this->x+i.x);
    ti.Sety(this->y+i.y);

    return ti;
}

Imaginary Imaginary::operator-(Imaginary &i){
    Imaginary ti;
    ti.Setx(this->x-i.x);
    ti.Sety(this->y-i.y);
    return ti;
}

Imaginary Imaginary::operator*(Imaginary &i){
Imaginary ti;
ti.Setx((this->x*i.x) - (this->y*i.y));
ti.Sety((this->y*i.x)+(this->x*i.y));
return ti;
}

Imaginary Imaginary::operator~(){
int y;
y = this->y;
this->y = -y;
return *this;
}

Imaginary Imaginary ::operator/(Imaginary &i){
Imaginary numerator,denominator,ti;
//i want to use here the overloaded *(multiplacation) operator
numerator = (*this) * (~i);//showing error
denominator = (*this) * (~i);//showing error
ti.Setx(numerator.Getx()/denominator.Getx());
ti.Sety(numerator.Gety()/denominator.Getx());

return ti;
}

void Imaginary::print(){
cout<<x;
if (y>0)
cout<<"+i"<<y<<endl;
else if (y<0)
cout<<"-i"<<abs(y)<<endl;

}

int main()
{   
Imaginary res;
Imaginary z1(2,3);
Imaginary z2(1,-1);
z1.print();
z2.print();

/*res = z1+z2;
cout<<"Addition:-\n";
res.print();

res = z1-z2;
cout<<"Subtraction:-\n";
res.print()*/

res = z1*z2;
cout<<"Multiplication:-\n";
res.print();

res = z1/z2;
cout<<"Division:-\n";
res.print();

return 0;
}

错误消息如下:-

D:\Games\Cheese\main.cpp|66|error: no match for 'operator*' (operand types are 'Imaginary' and 'Imaginary')|

请任何人告诉我如何纠正它。


在这种情况下,该错误并不是最好的错误。你的operator*定义为

Imaginary Imaginary::operator*(Imaginary &i)

这要求右侧是左值。当你这样做时

(*this) * (~i)

in operator/, (~i)returns Imaginary这是一个右值。您无法将该右值绑定到 lavue 引用,因此不会考虑您的重载,并且您会收到编译器错误。

解决这个问题最简单的方法是采取const &相反喜欢

Imaginary Imaginary::operator*(const Imaginary &i)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从同一个类中的另一个运算符重载成员函数调用运算符重载成员函数(或使用运算符)? 的相关文章

  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 没有特殊字符的密码验证器

    我是 RegEx 的新手 已经进行了大量搜索 但没有找到任何具体内容 我正在编写一个验证密码字符串的正则表达式 可接受的字符串必须至少具有 4 种字符类型中的 3 种 数字 小写字母 大写字母 特殊字符 我对包含有一个想法 也就是说 如果这
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • std::vector 与 std::stack

    有什么区别std vector and std stack 显然 向量可以删除集合中的项目 尽管比列表慢得多 而堆栈被构建为仅后进先出的集合 然而 堆栈对于最终物品操作是否更快 它是链表还是动态重新分配的数组 我找不到关于堆栈的太多信息 但
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 使用 C# 中的 CsvHelper 将不同文化的 csv 解析为十进制

    C 中 CsvHelper 解析小数的问题 我创建了一个从 byte 而不是文件获取 csv 文件的类 并且它工作正常 public static List
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 如何定义一个可结构化绑定的对象的概念?

    我想定义一个concept可以检测类型是否T can be 结构化绑定 or not template
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 为什么使用小于 32 位的整数?

    我总是喜欢使用最小尺寸的变量 这样效果就很好 但是如果我使用短字节整数而不是整数 并且内存是 32 位字可寻址 这真的会给我带来好处吗 编译器是否会做一些事情来增强内存使用 对于局部变量 它可能没有多大意义 但是在具有数千甚至数百万项的结构
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

    我所说的 5 5 正是指第五行第五列 我发现使用屏幕坐标来绘制东西非常困难 OpenGL 中的所有坐标都是相对的 通常范围从 1 0 到 1 0 为什么阻止程序员使用屏幕坐标 窗口坐标如此严重 最简单的方法可能是通过以下方式设置投影以匹配渲
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • 在页面内的 div 中显示控制台错误和警报

    我正在为我的网络应用程序构建一个调试工具 我需要在 div 中显示控制台错误 我知道我可以使用自己制作的类似控制台的对象并使用它 但为了将来的使用 我需要将所有控制台错误发送到 window 实际上我想捕获控制台事件 要保持控制台正常工作
  • create-react-app React Js 的漏洞

    每次我创建一个反应应用程序时npx create react app
  • jquery 选择删除选项

    我目前正在成功使用它来删除选项 select select gender option value initial remove 有没有办法删除选项而不添加到选择器 如下所示 select select gender val initial
  • 过滤涉及安全约束的请求

    我有一个 Java Web 应用程序 它使用安全约束来锁定对资源的访问 当 Ajax 请求需要身份验证时 我尝试操纵 HTTP 401 响应 因此我创建了一个过滤器来观察响应中的 HTTP 状态并根据需要进行相应修改 问题是 似乎如果需要身
  • 使用lambda表达式连接pyqt中的槽

    我正在尝试将插槽与 lambda 函数连接起来 但它没有按我预期的方式工作 在下面的代码中 我成功正确连接了前两个按钮 对于我循环连接的后两个 这是错误的 之前有人问过同样的问题 Qt 使用 lambda 将槽与参数连接 https sta
  • OrderedDict 不按顺序排列

    这个循环的想法是迭代列表 如果对象的某个属性不是 OrderedDict 的键 则会添加它 它是对象列表的字典 for object in someList if object DATE not in myOrderedDict myOrd
  • 使 Omni 能够在 Windows 上的 vim 7.2 上运行

    我正在尝试将 Omni Complete 功能与 gVim 7 2 一起使用 但在 Windows 上我不断收到一条错误消息 错误 需要使用 python 编译 vimE117 未知功能 pythoncomplete complete 看起
  • 如何确定变量的内存占用(大小)?

    PHP 或 PHP 扩展 中是否有函数可以找出给定变量使用了多少内存 sizeof只是告诉我元素 属性的数量 memory get usage有帮助的是它给了我所使用的内存大小whole脚本 有没有办法对单个变量执行此操作 请注意 这是在开
  • django 排除的性能问题

    我有一个 Django 1 8 应用程序 并且使用 MsSQL 数据库 以 pyodbc 作为数据库后端 使用 django pyodbc azure 模块 我有以下型号 class Branch models Model name mod
  • BroadcastReceiver如何启动新意图

    我实现了一个广播接收器 以便在互联网连接丢失时 阻止 我的应用程序 我所说的阻止是指应用程序必须打开 无互联网连接 活动 这是我的接收器代码 public class ConnectivityReceiver extends Broadca
  • Gradle:将所有测试依赖项复制到 zip 文件

    我对 gradle 很陌生 所以也许我问的问题很简单 我正在寻找一种解决方案 将 testCompile 范围内的所有依赖项放入 zip 文件中 我检查了http forums gradle org gradle topics how do
  • 如何在 JavaScript 中访问当前范围之外的变量?

    我正在用 javascript 编写一个应用程序 但无法弄清楚如何访问此 jquery 解析中函数中声明的变量 在内部我可以访问全局变量 但我真的不想为这些值创建全局变量 基本上我想从 xml 文档中提取文件名simulationFiles
  • chrome.identity.getAuthToken 不起作用

    我正在使用 Chrome Identity API 在我的 Chrome 扩展程序上为用户提供 Google 身份验证 我参考了Google官方教程 链接 Chrome 身份 API https developer chrome com a
  • BIRT 的 HTMLRenderReport 向嵌入图像添加类似“file://”的 url(而不是将它们嵌入到 HTML 中)

    我有一个 BIRT 报告 母版页中有一个图像 我的 BIRT 设计文件 我在报告中嵌入了一个 png 它在执行后生成了以下 XMLbody tag
  • JavaScript 中字符串的子类化

    我有一个字符串方法String prototype splitName 将作者姓名 字符串 拆分为名字和姓氏 该声明var name authorName splitname 返回一个对象字面量name with name first an
  • 回调 after_destroy 未通过 ActiveAdmin 触发

    我使用 ActiveAdmin 作为我的应用程序的后台 我有以下三个模型 class Organization has many organization collection relations has many collections
  • JTextField:文本太长时如何在 JTextField 左侧设置文本

    我有一个很长的String我想显示在JTextField 如果String太长了 它显示的是右侧部分String 而不是左边部分 即使我使用setHorizontalAlignment JTextField LEFT 例如 如果我的Stri
  • 发送后10秒使用JDA删除消息

    我正在制作一个不和谐的机器人 它发送一个嵌入来显示用户库存 我正在制作一个游戏机器人 为了避免混乱 我想在 10 20 秒后删除该消息 任何人都知道我该怎么做 如果你完全理解这些问题 那么请不要说 哦 你需要遵循等等格式 我正在使用 Jav
  • ISO-8859-1(正确/错误)

    这是真话还是假话 Unicode 是 ISO 8859 1 的超集 因此前 256 个 Unicode 字符对应于 ISO 8859 1 规范的编码 ISO 8859 1 仅包含 256 编码 也就是说 没有什么比 256 个代码更多的了
  • 如何从同一个类中的另一个运算符重载成员函数调用运算符重载成员函数(或使用运算符)?

    我正在用 C 编写一段代码来处理复数 我也在练习运算符重载 所以我超载了 乘法运算符 现在我想在我的重载中使用重载运算符 除法运算符 但是当我使用时 它的显示错误 这是代码 include