一 概述
既然使用关键字operator配合运算符++可以实现对象的自加,那么关键字operator配合运算符+就可以实现将对象相加,本节我们就来学习一下重载加法运算函数operator+,减法运算的道理与加法相同,这里就不说了
二 实现分析
- 在使用operator+之前我们先来看如果没有operator+重载函数我们该如何对两个对象进行相加运算。
- 比如说我们定义了两个对象:sum a,b;然后将这两个对象相加的结果赋给第三个对象:sum c=a+b;
- 我们要实现这样的操作仍然要定义一个add()函数,该函数被对象a所调用,在调用的同时将对象b作为参数传递到add()函数中去,然后在函数中将两个对象的成员变量相加,并将结果传递到构造函数中,最后返回这个构造函数。
三 对象调用方法相加示例及结果输出
3.1 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| #include<iostream> using namespace std; class num { private: int n; public: num(){n=1;cout<<"构造函数执行\n";} num(int i){n=i;cout<<"带参数的构造函数执行\n";} num(const num&s){this->n=s.n;cout<<"复制构造函数执行\n";} ~num(){cout<<"析构函数执行\n";} int get()const{return n;} void set(int x){n=x;} num add(const num&r){return num(n+r.get());} const num &operator++() { ++n; return *this; } const num&operator++(int o) { num temp(*this); ++n; return temp; }
}; int main() { num one(1),two(2),three; three=one.add(two); cout<<"one:"<<one.get()<<endl; cout<<"two:"<<two.get()<<endl; cout<<"three:"<<three.get()<<endl; return 0; }
|
3.2 输出结果
1 2 3 4 5 6 7 8 9 10 11
| 带参数的构造函数执行 带参数的构造函数执行 构造函数执行 带参数的构造函数执行 析构函数执行 one:1 two:2 three:3 析构函数执行 析构函数执行 析构函数执行
|
四 operator+示例及结果输出
4.1 代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| #include<iostream> using namespace std; class num { private: int n; public: num(){n=1;cout<<"构造函数执行\n";} num(int i){n=i;cout<<"带参数的构造函数执行\n";} num(const num&s){this->n=s.n;cout<<"复制构造函数执行\n";} ~num(){cout<<"析构函数执行\n";} int get()const{return n;} void set(int x){n=x;} const num operator+(const num&r){return num(n+r.get());} const num &operator++() { ++n; return *this; } const num&operator++(int o) { num temp(*this); ++n; return temp; }
}; int main() { num one(1),two(2),three; //three=one.add(two); three=(one+two); cout<<"one:"<<one.get()<<endl; cout<<"two:"<<two.get()<<endl; cout<<"three:"<<three.get()<<endl;
return 0; }
|
4.2 输出结果
1 2 3 4 5 6 7 8 9 10 11
| 带参数的构造函数执行 带参数的构造函数执行 构造函数执行 带参数的构造函数执行 析构函数执行 one:1 two:2 three:3 析构函数执行 析构函数执行 析构函数执行
|