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