1、理解下面的程序,并在codeblocks下运行查看结果,回答程序后面的问题。 #include <iostream> using namespace std; class CComplex { public: CComplex() { real = 0; imag = 0; } CComplex(int x,int y) { real = x; imag = y; } int real; int imag; CComplex operator + (CComplex obj1)-----------------------------------------------① { CComplex obj2(real + obj1.real, imag + obj1.imag); return obj2; } }; void main() { CComplex obj1(100,30); CComplex obj2(20, 30); CComplex obj; obj = obj1+obj2; ------------------------------------------------------------------② cout << obj.real <<endl; cout << obj.imag << endl; } 问题一:①处的运算符重载,为什么该函数的返回值要设计成CComplex类型? 问题二:②处的运算符重载函数调用就相当于“obj=operator+(obj1,obj2);”,但是为什么CComplex类中的运算符重载函数只设计了一个参数? 2、有两个矩阵a 和b ,均为2 行3 列。求两个矩阵之和。用成员函数重载运算符" + " ,使之能用于矩阵相加,如c=a+b。用友元函数重载运算符" - " ,使之能用于矩阵相减,如d=a-b。并以矩阵的形式输出c和d的值。 3、在2题的基础上,重载流插入运算符“<<”和流提取运算符“>>”,使之能用于该矩阵的输入和输出。
时间: 2023-08-15 20:10:36 浏览: 136
问题一:①处的运算符重载,返回值设计成CComplex类型是因为该函数的作用是将两个CComplex对象相加,得到一个新的CComplex对象,所以需要返回一个CComplex类型的对象。
问题二:CComplex类中的运算符重载函数只设计了一个参数是因为第一个参数被默认为该类的对象本身,也就是说,obj1 + obj2 相当于 obj1.operator+(obj2),其中obj1就是该类的对象本身。
2、代码如下:
```cpp
#include <iostream>
using namespace std;
class Matrix {
public:
Matrix() {
for(int i=0; i<2; i++) {
for(int j=0; j<3; j++) {
data[i][j] = 0;
}
}
}
friend Matrix operator+(Matrix m1, Matrix m2) {
Matrix result;
for(int i=0; i<2; i++) {
for(int j=0; j<3; j++) {
result.data[i][j] = m1.data[i][j] + m2.data[i][j];
}
}
return result;
}
friend Matrix operator-(Matrix m1, Matrix m2) {
Matrix result;
for(int i=0; i<2; i++) {
for(int j=0; j<3; j++) {
result.data[i][j] = m1.data[i][j] - m2.data[i][j];
}
}
return result;
}
friend ostream& operator<<(ostream& os, Matrix m) {
for(int i=0; i<2; i++) {
for(int j=0; j<3; j++) {
os << m.data[i][j] << " ";
}
os << endl;
}
return os;
}
friend istream& operator>>(istream& is, Matrix& m) {
for(int i=0; i<2; i++) {
for(int j=0; j<3; j++) {
is >> m.data[i][j];
}
}
return is;
}
private:
int data[2][3];
};
int main() {
Matrix a, b, c, d;
cout << "请输入矩阵a:" << endl;
cin >> a;
cout << "请输入矩阵b:" << endl;
cin >> b;
c = a + b;
d = a - b;
cout << "矩阵a + b = " << endl;
cout << c;
cout << "矩阵a - b = " << endl;
cout << d;
return 0;
}
```
3、在2题的代码基础上,只需要再重载一下流插入运算符和流提取运算符即可。重载后,可以直接使用`cin>>a`和`cout<<a`来输入和输出矩阵a的值。
完整代码如下:
```cpp
#include <iostream>
using namespace std;
class Matrix {
public:
Matrix() {
for(int i=0; i<2; i++) {
for(int j=0; j<3; j++) {
data[i][j] = 0;
}
}
}
friend Matrix operator+(Matrix m1, Matrix m2) {
Matrix result;
for(int i=0; i<2; i++) {
for(int j=0; j<3; j++) {
result.data[i][j] = m1.data[i][j] + m2.data[i][j];
}
}
return result;
}
friend Matrix operator-(Matrix m1, Matrix m2) {
Matrix result;
for(int i=0; i<2; i++) {
for(int j=0; j<3; j++) {
result.data[i][j] = m1.data[i][j] - m2.data[i][j];
}
}
return result;
}
friend ostream& operator<<(ostream& os, Matrix m) {
for(int i=0; i<2; i++) {
for(int j=0; j<3; j++) {
os << m.data[i][j] << " ";
}
os << endl;
}
return os;
}
friend istream& operator>>(istream& is, Matrix& m) {
for(int i=0; i<2; i++) {
for(int j=0; j<3; j++) {
is >> m.data[i][j];
}
}
return is;
}
private:
int data[2][3];
};
int main() {
Matrix a, b, c, d;
cout << "请输入矩阵a:" << endl;
cin >> a;
cout << "请输入矩阵b:" << endl;
cin >> b;
c = a + b;
d = a - b;
cout << "矩阵a + b = " << endl;
cout << c;
cout << "矩阵a - b = " << endl;
cout << d;
return 0;
}
```