Cpp实验:运算符重载

目录

一、 实验目的和要求

二、 实验环境(实验设备)

三、 实验内容与结果

实验一

2. 关键程序代码:

3. 程序运行结果:

实验二

1. 程序功能:

2. 关键程序代码:

3. 程序运行结果:

实验三

1. 程序功能:

2. 关键程序代码:

3. 程序运行结果:

  运算符重载是C++中的特殊语法,它能够让我们为自定义的类型定义运算符的行为。

1. 运算符重载让我们可以为自定义类型定义类似原生数据类型的运算符。比如,我们可以通过重载“+”运算符来实现自定义类型的加法运算。

2. 运算符重载遵循一些规则,比如运算符重载函数必须作为类的成员函数或全局函数,不能改变运算符的优先级和结合性,等等。

3. 运算符重载可以大大简化代码,提高可读性和可维护性。通过自定义类型的运算符,我们可以直接对自定义类型进行运算操作,不再需要额外的函数调用。

4. 在运算符重载时,我们需要注意一些细节,比如避免对原生数据类型进行误用、选择合适的参数和返回值类型、处理不同类型之间的运算等等。

总而言之,C++中的运算符重载是一项非常有用的特性,它能够为自定义类型定义运算符的行为,大大提高代码的可读性和可维护性。在进行运算符重载时,我们需要遵循一些规则和注意一些细节,以确保程序的正确性和有效性。

一、 实验目的和要求

1. 掌握常用的运算符重载方法;

2. 掌握单目、双目运算符的重载规则;

3. 掌握运算符重载为类的成员和友元函数。

二、 实验环境(实验设备)

软件:Windows10,Code Blocks

硬件:个人计算机

三、 实验内容与结果

实验一

1. 程序功能:

将运算符“--”重载为:a) 前置“--”运算符的效果是将对象中的字符串减去前两个,之后输出该字符串;b) 后置“--”运算符的效果是将对象中的字符串减去后两个,之后输出该字符串。要求:不限该重载运算符为类的成员函数、友元函数、普通函数

2. 关键程序代码:

1. #include <iostream>
2.using namespace std;
3.string operator--(string a)
4.{
5.    return a.erase(0,2);
6.}
7.string operator--(string a,int)
8.{
9.    return a.erase(a.size()-2);
10.}
11.int main()
12.{
13.    string A = "87654321";
14.    cout<<--A<<endl;
15.    cout<<A--<<endl;
16.    cout<<--A--<<endl;
}

3. 程序运行结果:

实验二

1. 程序功能:

重载双目运算符“^”,以实现数学中求次方的目的。要求:该重载运算符为类的成员函数

2. 关键程序代码:

1.#include<iostream>
2.#include<cmath>
3.using namespace std;
4.class power
5.{
6.    double a;
7.public:
8.    power(double a):a(a){}
9.    double operator^(double b){
10.    return pow(a,b);
11.    }
12.};
13.int main()
14.{
15.    power A(30);
16.    cout<<(A^3)<<endl;
}

3. 程序运行结果:

实验三

1. 程序功能:

重载运算符“*”,将其应用于两个矢量叉乘(cross),具体矢量叉乘的方式为矢量A(a1, a2, a3)、B(b1, b2, b3),则会返回A*B=(a2*b3-a3*b2, a3*b1−a1*b3, a1*b2-a2*b1),二维空间的矢量叉乘同理,只是令a3=b3=0。例如将对象初始化为A(1,2,3)、B(3,2,1),则A*B最终返回的是矢量(−4,8,−4)。同时若将对象初始化为A(1,2)、B(3,2),则A*B最终返回的是数值(0,0,−4)。要求重载的运算符“*”能实现以上两个功能限制其为类的友元函数,但不限制定义类的个数。

2. 关键程序代码:

1.#include<iostream>
2.#include<cmath>
3.using namespace std;
4.class cross
5.{
6.    double A,B,C;
7.public:
8.    cross(double A,double B,double C=0):A(A),B(B),C(C){}
9.    friend cross operator*(cross x,cross y);
10.    void display()
11.    {
12.       cout<< A <<” “<< B <<” “<< C <<endl;
13.    }
14.};
15.cross operator*(cross x,cross y)
16.{
17.
18.    return cross(x.B*y.C-x.C*y.B,x.C*y.A-x.A*y.C,x.A*y.B-x.B*y.A);
19.}
20.int main()
21.{
22.    cross L1(1,2,3),L2(3,2,1);
23.    cross L3=L1*L2;
24.    L3.display();
25.    cross L4(1,2),L5(3,2);
26.    cross L6=L4*L5;
27.    L6.display();
}

3. 程序运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

x陌北x

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值