2、理解下面的程序,并运行查看结果,回答程序后面的问题。 #include <iostream.h> class CComplex { public: CComplex(double r = 0, double i = 0) { real = r; imag = i; } int operator int() { return (int)real; } void Display(void) { cout << "(" << real << "," << imag << ")" << endl; } protected: double real; double imag; }; class CVector { public: CVector(CComplex &obj1, CComplex &obj2, CComplex &obj3, CComplex &obj4) { objArray[0] = obj1; objArray[1] = obj2; objArray[2] = obj3; objArray[3] = obj4; } friend CComplex &operator[](CVector obj, int n); private: CComplex objArray[4]; }; CComplex &operator[](CVector obj, int n) { if(n<0 || n>3) { cout<<"Out of range!"<<endl; exit(0); } return obj.objArray[n]; } int main() { CComplex c1(1.1, 1.1); CComplex c2(2.2, 2.2); CComplex c3(3.3, 3.3); CComplex c4(4.4, 4.4); CVector v(c1,c2,c3,c4); v[0].Display(); v[1].Display(); v[2].Display(); v[3].Display(); v[0] = 5.5; ----------------------------------------------------------① v[1] = CComplex(6.6); -------------------------------------------② v[2] = int(CComplex(7.7)); --------------------------------------③ v[3] = int(CComplex(8.8,9.9)); ----------------------------------④ v[0].Display(); v[1].Display(); v[2].Display(); v[3].Display(); return 0; } 问题一:上述程序存在两大错误,在不修改主函数和程序原意的前提下,改正该程序中存在的错误。 问题二:①处的转换属于显式转换还是隐式转换,并解释该转换过程。 问题三:②处的转换属于显式转换还是隐式转换,并解释该转换过程。 问题四:解释③处的转换过程。 问题五:解释④处的转换过程。
时间: 2023-08-15 14:12:34 浏览: 65
问题一:上述程序存在两个错误,分别是:
1. 在头文件引用时,应该使用 #include <iostream>,而不是 #include <iostream.h>。
2. 在 CVector 类中的友元函数 operator[] 中,应该传入一个 CVector 对象的引用,而不是一个值传递的 CVector 对象。
修改后的代码如下:
```cpp
#include <iostream>
using namespace std;
class CComplex {
public:
CComplex(double r = 0, double i = 0) {
real = r;
imag = i;
}
int operator int() {
return (int)real;
}
void Display(void) {
cout << "(" << real << "," << imag << ")" << endl;
}
protected:
double real;
double imag;
};
class CVector {
public:
CVector(CComplex &obj1, CComplex &obj2, CComplex &obj3, CComplex &obj4) {
objArray[0] = obj1;
objArray[1] = obj2;
objArray[2] = obj3;
objArray[3] = obj4;
}
friend CComplex &operator[](CVector &obj, int n);
private:
CComplex objArray[4];
};
CComplex &operator[](CVector &obj, int n) {
if (n < 0 || n > 3) {
cout << "Out of range!" << endl;
exit(0);
}
return obj.objArray[n];
}
int main() {
CComplex c1(1.1, 1.1);
CComplex c2(2.2, 2.2);
CComplex c3(3.3, 3.3);
CComplex c4(4.4, 4.4);
CVector v(c1, c2, c3, c4);
v[0].Display();
v[1].Display();
v[2].Display();
v[3].Display();
v[0] = 5.5;
v[1] = CComplex(6.6);
v[2] = int(CComplex(7.7));
v[3] = int(CComplex(8.8, 9.9));
v[0].Display();
v[1].Display();
v[2].Display();
v[3].Display();
return 0;
}
```
问题二:①处的转换属于显式转换,因为将一个 double 类型的值转换为一个 CComplex 类型的对象,需要通过构造函数来进行。
转换过程如下:将 5.5 显式转换为 CComplex 类型的对象,调用 CComplex 的构造函数,将 5.5 赋值给 real,imag 的默认值为 0,表示生成一个实部为 5.5,虚部为 0 的复数。然后将这个新的 CComplex 对象赋值给 v[0]。
问题三:②处的转换属于显式转换,因为将一个 double 类型的值转换为一个 CComplex 类型的对象,需要通过构造函数来进行。
转换过程如下:将 6.6 显式转换为 CComplex 类型的对象,调用 CComplex 的构造函数,将 6.6 赋值给 real,imag 的默认值为 0,表示生成一个实部为 6.6,虚部为 0 的复数。然后将这个新的 CComplex 对象赋值给 v[1]。
问题四:③处的转换属于显式转换,因为将一个 double 类型的值转换为 int 类型需要通过强制类型转换来进行。
转换过程如下:将 7.7 显式转换为 CComplex 类型的对象,调用 CComplex 的构造函数,将 7.7 赋值给 real,imag 的默认值为 0,表示生成一个实部为 7.7,虚部为 0 的复数。然后将这个新的 CComplex 对象转换为 int 类型,只取实部的整数部分,即 7,然后将这个整数赋值给 v[2]。
问题五:④处的转换属于显式转换,因为将一个带有虚部的 double 类型的值转换为 int 类型需要通过强制类型转换来进行。
转换过程如下:将 8.8+9.9i 显式转换为 CComplex 类型的对象,调用 CComplex 的构造函数,将 8.8 赋值给 real,将 9.9 赋值给 imag,表示生成一个实部为 8.8,虚部为 9.9 的复数。然后将这个新的 CComplex 对象转换为 int 类型,只取实部的整数部分,即 8,然后将这个整数赋值给 v[3]。
相关推荐
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/x-zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)