c++运算符重载

本文探讨了C++中运算符重载的不同方法,包括前置和后置自增运算符的重载,并展示了如何在类中实现数组的操作,包括动态内存管理和数组元素的自增自减。通过实例代码解释了每个方法的使用,以及在主函数中的测试情况。
摘要由CSDN通过智能技术生成

c++运算符重载

#include<iostream>
using namespace std;
#if 0
class rec {
private:
	float h;
	float w;
	float l;
public:
	rec(float h=0,float w=0,float l=0) {
		this->h = h;
		this->w = w;
		this->l = l;
	}
	void area() {
		cout << h * w * l << endl;
	}
	//方法一
	/*
	rec add(rec &a)//求两个矩形边长相加后的新的矩形面积
	{
		rec c;
		c.h = this->h + a.h;
		c.w = this->w + a.w;
		c.l = this->l + a.l;
		return c;
	}*/
	//方法二
	/*
	rec operator+(rec &a) {
		rec c;
		c.h = this->h + a.h;
		c.w = this->w + a.w;
		c.l = this->l + a.l;
		return c;
		
	}*/
	//方法三
	//friend rec operator+(rec &a, rec &b);
	//方法四
	rec operator++() {
		rec n;
		n.h = ++h;
		n.w = ++w;
		n.l = ++l;
		return n;
	}
};
/*
rec operator+(rec &a, rec &b) {
	rec c;
	c.h = b.h + a.h;
	c.w = b.w + a.w;
	c.l = b.l + a.l;
	return c;
}*/





int main() {
	rec r1(2,3,4);
	rec r2(3, 4, 5);
	r1.area();
	r2.area();
	//方法一
	//rec c;
	//c=r1.add(r2);
	//c.area();
	//方法二
	//rec e;
	//e = r1 + r2;
	//e.area();
	//方法三
	//rec d;
	//d = r1 + r2;
	//d.area();
	//方法四
	++r2;
	r2.area();
}
#endif

案例:

数据处理: (每小题10分)
① 导入相包文件
② 定义私有数据成员
int *p;//表示一维数组
int n; //一维数组的大小
③ 按照要求书写公有成员函数
④ 按照要求构造函数:初始化数据成员
⑤ 按照要求拷贝构造函数
⑥ 按照要求重载前置自增的成员函数
⑦ 按照要求重载后置自增的成员函数
⑧ 按照要求重载前置自减的友元函数和后置自减的友元函
⑨ 实现以下要求:Void print():输出数组成员的函数 ,析构函数:释放动态内存
⑩ 主函数中测试,要求输出数组元素的自增和自减(前置、后置)情况。

#include<iostream>
using namespace std;

#if 0

class opera {
public:
	int *p;
	int n;
public:
	//无参构造
	opera(){}
	//有参构造
	opera(int *a= NULL,int n=0) {
		this->n = n;
		p = new int[n];
		for (int i = 0; i < n; i++) {
			this->p[i]=a[i];
		}

	}
	//拷贝构造函数
	opera(opera &a) {
		n = a.n;
		p = new int[n];
		for (int i = 0; i < n; i++) {
			this->p[i]=a.p[i];
		}
	}
	//重载前置自增的成员函数
	opera operator++() {
		for (int i = 0; i < n; i++) {
			this->p[i] = ++(p[i]);
		}
		return *this;
	}
	//重载后置自增的成员函数
	opera operator++(int) {
		for (int i = 0; i < n; i++) {
			this->p[i] = p[i]++;
		}
		return *this;
	}
	//显示
	void show() {
		for (int i = 0; i < n; i++)
		{
			cout << p[i] << " ";
		}
		cout << endl;
	}
	~opera()//析构函数:释放动态内存 
	{
		if (p != NULL)
		{
			delete[]p;
			p = NULL;
		}
		cout << "xigou" << endl;
	}
	//重载前置自减的友元函数和后置自减的友元函
	friend opera operator--(opera &v);
	//friend opera operator--(opera &b);

};

opera operator--(opera &v) {
	for (int i = 0; i < v.n; i++) {
		v.p[i] = (v.p[i])--;
	}
	return v;
}

//opera operator--(opera &b) {
//	for (int i = 0; i < b.n; i++) {
//		b.p[i] = --(b.p[i]);
//	}
//	return b;
//}

int main() {
	int a[]={11,2,32,4,25,36,72};
	opera v(a, 7);//有参构造函数
	opera v1(v);//拷贝构造函数
	v.show();
	//v1.show();
	v++;
	v.show();
	++v;
	v.show();

	opera v2(v1);
	v2=v--;
	v2.show();
}



#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小飞龙程序员

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

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

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

打赏作者

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

抵扣说明:

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

余额充值