C++实验: 运算符重载

2023-11-10

C++实验: 运算符重载

1.实验目的

(1)进一步了解运算符重载的概念与使用方法。

(2)掌握几种常用的运算符重载方法。

(3)了解转换构造函数的使用方法。

(4)了解在Visual C++6.0环境下进行运算符重载要注意的问题。

2.实验内容

(1)声明一个复数类,重载运算符函数作为其成员函数,使之用于复数计算;

(2)声明一个复数类,重载运算符“+”,使之用于复数加法运算,同时求复数、整数的和;

(3)求已知的矩阵之和,重载运算符“+”,使之用于矩阵相加;

(4)声明一个教师类和学生类,有部分数据成员相同,转换学生对象为教师类,将相同数据移植过去。

3.实验代码

#include <iostream>
using namespace std;

class Complex
{
public:
    Complex()
{ real = 0; imag = 0; }
    Complex(double r, double i) { real = r; imag = i; }
    Complex operator + (Complex &c2);
    Complex operator - (Complex &c2);
    Complex operator*(Complex &c2);
    Complex operator/(Complex &c2);
    void display();
private:
    double real;
    double imag;
};

Complex Complex::operator+(Complex &c2)
{
    Complex c;
    c.real= real + c2.real;
    c.imag= imag + c2.imag;
    return c;
}

Complex Complex::operator-(Complex &c2)
{
    Complex c;
    c.real= real - c2.real;
    c.imag= imag - c2.imag;
    return c;
}

Complex Complex::operator*(Complex &c2)
{
    Complex c;
    c.real= real * c2.real -imag * c2.imag;
    c.imag= imag * c2.real +real * c2.imag;
    return c;
}

Complex Complex::operator/(Complex &c2)
{
    Complex c;
    c.real= (real*c2.real +imag * c2.imag) /(c2.real*c2.real + c2.imag*c2.imag);
    c.imag= (imag*c2.real -real * c2.imag) /(c2.real*c2.real + c2.imag*c2.imag);
    return c;
}

void Complex::display()
{
    cout<< "(" << real << "," << imag << "i)" << endl;
}
int main()
{
    Complex c1(3, 4), c2(5,-10), c3;
    c3= c1 + c2;
    cout<< "c1+c2=";
    c3.display();
    c3= c1 - c2;
    cout<< "c1-c2=";
    c3.display();
    c3= c1 * c2;
    cout<< "c1*c2=";
    c3.display();
    c3= c1 / c2;
    cout<< "c1/c2=";
    c3.display();
    return 0;
}
#include <iostream>
using namespace std;

class Complex
{
public:
    Complex()
{ real = 0; imag = 0; }
    Complex(double r, double i) { real = r, imag = i; }
    Complex operator + (Complex &c2);
    Complex operator + (int &i);
    friend Complex operator + (int &, Complex &);
    void display();
private:
    double real;
    double imag;
};

Complex Complex::operator + (Complex &c)
{
    return Complex(real + c.real, imag + c.imag);
}

Complex Complex::operator + (int &i)
{
    return Complex(real + i, imag);
}

void Complex::display()
{
    cout<< "(" << real << "," << imag << "i)" << endl;
}

Complex operator + (int &i, Complex &c)
{
    return Complex(i + c.real, c.imag);
}

int main()
{
    Complex c1(3, 4), c2(5,-10), c3;
    int i = 5;
    c3= c1 + c2;
    cout<< "c1 + c2 = ";
    c3.display();
    c3= i + c1;
    cout<< "i + c1 = ";
    c3.display();
    c3= c1 + i;
    cout<< "c1 + i = ";
    c3.display();
    return 0;
}
#include <iostream>
using namespace std;

class Matrix
{
public:
    Matrix();
    friend Matrix operator + (Matrix &, Matrix &);
    void input();
    void display();
private:
    int mat[2][3];
};

Matrix::Matrix()
{
    for (int i = 0; i < 2;i++)
         for (int j = 0; j < 3;j++)
             mat[i][j]= 0;
}

Matrix operator + (Matrix &a, Matrix &b)
{
    Matrix c;
    for (int i = 0; i < 2;i++)
         for (int j = 0; j < 3;j++)
         {
             c.mat[i][j]= a.mat[i][j] + b.mat[i][j];
         }
    return c;
}

void Matrix::input()
{
    cout<< "input value of matrix :" << endl;
    for (int i = 0; i < 2;i++)
         for (int j = 0; j < 3;j++)
             cin>> mat[i][j];
}

void Matrix::display()
{
    for (int i = 0; i < 2;i++)
    {
         for (int j = 0; j < 3;j++)
         {
             cout<< mat[i][j] << " ";
         }
         cout<< endl;
    }
}

int main()
{
    Matrix a, b, c;
    a.input();
    b.input();
    cout<< endl << "Matrix a : " << endl;
    a.display();
    cout<< endl << "Matrix b : " << endl;
    b.display();
    c= a + b;
    cout<< endl << "Matrix c = Matrix a + Matrix b : " << endl;
    c.display();
    return 0;
}
#include <iostream>
using namespace std;

class Student
{
public:
    Student(int,char[], char, float);
    int get_num() { return num; }
    char * get_name() { return name; }
    char get_sex() { return sex; }
    void display()
    {
         cout<< "num:"<< num << "\nnmae : " <<name << "\nsex : " << sex << "\nscore : "<< score << "\n\n";
    }
private:
    int num;
    char name[20];
    char sex;
    float score;
};

Student::Student(int n, char nam[], char s, float sco)
{
    num = n;
    strcpy(name,nam);
    sex = s;
    score = sco;
}

class Teacher
{
public:
    Teacher() {}
    Teacher(Student&);
    Teacher(int n, char nam[], char sex, float pay);
    void display();
private:
    int num;
    char name[20];
    char sex;
    float pay;
};

Teacher::Teacher(int n, char nam[], char s, float p)
{
    num = n;
    strcpy(name,nam);
    sex = s;
    pay = p;
}

Teacher::Teacher(Student& stud)
{
    num =stud.get_num();
    strcpy(name,stud.get_name());
    sex =stud.get_sex();
    pay = 1500;
}

void Teacher::display()
{
    cout<< "num:"<< num << "\nname : " <<name << "\nsex" << sex << "\npay:"<< pay << "\n\n";
}

int main()
{
    Teacher
teacher1(10001, "Li", 'f', 1234.5), teacher2;
    Student
student1(20010, "Wang", 'm', 89.5);
    cout<< "student1:" << endl;
    student1.display();
    teacher2 =
Teacher(student1);
    cout<< "teacher2:" << endl;
    teacher2.display();
    return 0;
}

4.实验结果

(1)
在这里插入图片描述
(2)
在这里插入图片描述
(3)
在这里插入图片描述
(4)
在这里插入图片描述

5.实验总结

(1)运算符重载的方法是定义一个重载运算符函数的重载,使指定的运算符不仅能实现原有的功能,而且能实现在函数中指定的新功能;

(2)运算符重载实质上是函数的重载。

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

C++实验: 运算符重载 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • WPF 数据绑定到复合类模式?

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

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • ASP.NET Core 3.1登录后如何获取用户信息

    我试图在登录 ASP NET Core 3 1 后获取用户信息 如姓名 电子邮件 id 等信息 这是我在登录操作中的代码 var claims new List
  • 如何获取 EF 中与组合(键/值)列表匹配的记录?

    我有一个数据库表 其中包含每个用户 年份组合的记录 如何使用 EF 和用户 ID 年份组合列表从数据库获取数据 组合示例 UserId Year 1 2015 1 2016 1 2018 12 2016 12 2019 3 2015 91
  • 两个类可以使用 C++ 互相查看吗?

    所以我有一个 A 类 我想在其中调用一些 B 类函数 所以我包括 b h 但是 在 B 类中 我想调用 A 类函数 如果我包含 a h 它最终会陷入无限循环 对吗 我能做什么呢 仅将成员函数声明放在头文件 h 中 并将成员函数定义放在实现文
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 为什么 isnormal() 说一个值是正常的,而实际上不是?

    include
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 相当于Linux中的导入库

    在 Windows C 中 当您想要链接 DLL 时 您必须提供导入库 但是在 GNU 构建系统中 当您想要链接 so 文件 相当于 dll 时 您就不需要链接 为什么是这样 是否有等效的 Windows 导入库 注意 我不会谈论在 Win
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 在OpenGL中,我可以在坐标(5, 5)处精确地绘制一个像素吗?

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

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 解决:class invalid for deserialization序列化的问题(真实有效)

    数据库连接失败 在数据库连接失败 经常会有蛮多一系列的问题导致的原因 这个时候一定要多去尝试一下各种方法 并且做好自己的梳理 一 例如我在SpringBoot项目中使用了阿里的数据库连接池Driud 有次在启动的时候 会报这样的错 Caus
  • Spring AOP面向切面编程:理解篇(一看就明白)

    一直想着怎么去通俗的讲解AOP 看了一篇文章受到了启发 https blog csdn net qukaiwei article details 50367761 下面我加入自己的理解 咱们来说说AOP 一 到底什么是AOP 面向切面编程
  • conda install R语言报错问题血泪解决

    今天在安装conda之后 想安装r语言环境 却遇到如下报错 真的超级郁闷 conda install r Collecting package metadata current repodata json failed CondaHTTPE
  • LeetCode 2488. 统计中位数为K的子数组

    题目描述 给你一个长度为 n 的数组 nums 该数组由从 1 到 n 的 不同 整数组成 另给你一个正整数 k 统计并返回 nums 中的 中位数 等于 k 的非空子数组的数目 注意 数组的中位数是按 递增 顺序排列后位于 中间 的那个元
  • sqli - labs -Less - 7 ~ 8

    输入id 1显示正常 输入id 1 报错 这里我们无法从错误信息中找到我们需要的东西 就要用到盲注了 lt 这里的盲注指的是布尔盲注 gt 所谓盲注就是我们去猜测数据库的长度等等 再结合语句去验证从而得到我们想要的信息 我们依然是用burp
  • 在HTML5中有什么可以替代iFrame

    最佳解决方法 通常有4种方法可以将HTML嵌入到网页中 iframe的内容完全位于当前页面不同的上下文中 虽然这是一个很棒的功能 而且是不同浏览器版本之间兼容最好的 但是它也带来了额外的问题 将frame大小跟网页内容设置一致比较麻烦 AJ
  • C语言代码覆盖率测试工具-OpenCppCoverage介绍

    代码覆盖率测试工具名称 OpenCppCoverage 简介 OpenCppCoverage是2014年推出的Windows平台下开源的C 代码覆盖率工具 类似于Linux下gcc内嵌的gcov工具 它不需要在编译时插桩 只需要有编译生成的
  • 17.进程同步与死锁——信号量临界区保护

    1 温故知新 通过对信号量的访问和修改 让进程有序推进 问题 empty值必须是正确的 如果empty错了 就不能有序推进了 2 共同修改信号量引出的问题 生产者 Producer item P empty 生产者先判断 缓存区个数 emp
  • 富文本图片怎么上传_django上传图片到七牛云-富文本编辑器上传图片到七牛云...

    django创建项目 默认是保存资源到本地的 但是由于会占用太多的存储空间 对日后管理和升级不太友善 所以一般会把静态资源保存在第三方存储库里 这里 我们就是用到了七牛云 云存储 安装七牛云所需要的包 pip install django
  • 教你在M1芯片的imac一体机上安装PS2021 附教程和方法适用于所有Mac

    提示 文章转载自互联网 文章目录 前言 一 正确安装流程 二 注意事项 总结 前言 苹果在21年4月发布了搭载M1芯片的一体机产品 imac 2021 惊艳的机生设计和超薄的厚度实在是太香了 关键是性价比还算不错 详细大部分购买Imac的用
  • 4. 定时器(TIM)(定时器计数)

    1 TIM简介 TIM Timer 定时器 定时器可以对输入的时钟进行计数 并在计数值达到设定值时触发中断 16位计数器 预分频器 自动重装寄存器的时基单元 在72MHz计数时钟下可以实现最大59 65s 1 72 2 16 2 16 2
  • 多服务器分布式系统架构,集中式架构与分布式架构,你了解多少?

    原标题 集中式架构与分布式架构 你了解多少 什么是集中式 集中式架构就是将项目集中存储在中央服务器中 在工作的时候 大家只要自己电脑上操作 从同一个地方下载最新版本 然后开始工作 做完的工作再提交给中央服务器保存 这种方式需要联网 典型的例
  • 翻译:Apache Linkis Graduated to Apache Top-Level Project(Apache Linkis 升级为顶级项目)

    Apache Linkis是一个计算中间件 作为上层应用和底层引擎之间的一层 如Apache Spark Apache Hive和Apache Flink 它在2021年作为一个Apache孵化器项目开始 并在2023年1月升级为顶级项目
  • Spring Boot

    前言 什么是Spring Boot 为什么要学Spring Boot Spring 的诞 是为了简化Java 程序的开发的 Spring Boot 的诞 是为了简化Spring 程序开发 的 Spring就像汽车 相比以前人只能其自行车走路
  • CGAL 使用Voronoi协方差估计点云的法线

    目录 一 算法原理 1 主要函数 二 代码实现 一 算法原理 1 主要函数 头文件 include
  • IO多路复用之select、poll、epoll

    五种网络I O模型 如果使用多进程 多线程模式的话 创建进程和创建线程需要时间开销 在编写服务器客户端程序时 如果服务器性能不行而客户端太多时这种代价很大 试想如果有一种方法能够同时监听按键设备 串口设备和网络socket的事件 可读 可写
  • 【Python零基础入门篇 · 11】:类型转换和深浅拷贝,可变对象和不可变对象、pass语句

    文章目录 int float str repr eval的类型转换 list str tuple三者的类型相互转换 深浅拷贝 浅拷贝 数据半共享 深拷贝 数据完全不共享 可变对象和不可变对象 可变对象 不可变对象 pass语句 int fl
  • HDMI和DP线的等级和速度

    转自 4K 144Hz到底需要多少带宽
  • Unity3D的GetComponent<>()

    GetComponent 是Unity游戏引擎中的一个函数 用于获取游戏对象上附加的组件 在Unity中 游戏对象可以添加各种不同的组件来实现不同的功能 比如 Transform组件用于控制游戏对象的位置 旋转和缩放 Renderer组件用
  • C++实验: 运算符重载

    C 实验 运算符重载 1 实验目的 1 进一步了解运算符重载的概念与使用方法 2 掌握几种常用的运算符重载方法 3 了解转换构造函数的使用方法 4 了解在Visual C 6 0环境下进行运算符重载要注意的问题 2 实验内容 1 声明一个复