先读题:
1、声明一个复数类Complex(类私有数据成员为double型的real和image)
2、定义构造函数,用于指定复数的实部与虚部。
3、定义取反成员函数,调用时能返回该复数的相反数(实部、虚部分别是原数的相反数)。
4、定义成员函数Print(),调用该函数时,以格式(real, image)输出当前对象。
5、编写加法友元函数,以复数对象c1,c2为参数,求两个复数对象相加之和。
6、主程序实现:
(1)读入两个实数,用于初始化对象c1。
(2)读入两个实数,用于初始化对象c2。
(3)计算c1与c2相加结果,并输出。
(4)计算c2的相反数与c1相加结果,并输出。
(5)输出c2的实部和虚部。
输入有两行:
第一行是复数c1的实部与虚部,以空格分隔;
第二行是复数c2的实部与虚部,以空格分隔。
输出共三行:
第一行是c1与c2之和;
第二行是c2的相反数与c1之和;
第三行是c2 。
在这里给出一组输入。例如:
2.5 3.7
4.2 6.5
在这里给出相应的输出。例如:
(6.7, 10.2)
(-1.7, -2.8)
(4.2, 6.5)
接下来我们来一步步分解:
1、声明一个复数类Complex(类私有数据成员为double型的real和image)
class Complex
{
private:
double real;
double image;
};
2、定义构造函数,用于指定复数的实部与虚部。
class Complex
{
private:
double real;//实部
double image;//虚部
public:
Complex(double r, double i)//构造函数
{
real = r;
image = i;
}
};
3、定义取反成员函数,调用时能返回该复数的相反数(实部、虚部分别是原数的相反数)。
//返回实部的相反数
double opposite_real()
{
return real * (-1);
}
//返回虚部的相反数
double opposite_image()
{
return image * (-1);
}
4、定义成员函数Print(),调用该函数时,以格式(real, image)输出当前对象。
//我们按题目给的格式输出就好
void print()
{
cout << "(" << real << "," << image << ")" << endl;
}
5、编写加法友元函数,以复数对象c1,c2为参数,求两个复数对象相加之和。
class Complex
{
friend void add1(Complex* c1,Complex* c2);
friend void add2(Complex* c1,Complex* c2);
};
//根据题意,add2实现c1与c2相加的功能
void add1(Complex* c1,Complex* c2)
{
cout << "(" << c1->real + c2->real << "," << c1->image + c2->image << ")" << endl;
}
//根据题意,add2实现c1与c2的相反数相加的功能
void add2(Complex* c1,Complex* c2)
{
cout << "(" << c1->real + c2->opposite_real() << "," << c1->image + c2->opposite_image() << ")" << endl;
}
说明:add1和add2的传入参数为Complex类的对象的指针,接收主函数里设置的Complex类的对象的地址,同时为了能够访问两个对象里的私有成员,需要在类内将两个函数声明为友元函数。
6、主函数实现
(1)先创建两个类对象c1和c2,并用键盘输入数据用构造函数初始化两个对象的实部值和虚部值
int main()
{
double r1, i1, r2, i2;
cin >> r1 >> i1 >> r2 >> i2;
Complex c1(r1,i1);
Complex c2(r2,i2);
return 0;
}
说明:我们cin了四个值,r1代表c1的实部,i1代表c1的虚部,r2代表c2的实部,i2代表c2的虚部。
(2)输出r1,r2的实部和与虚部和
void add1(Complex* c1,Complex* c2)
{
cout << "(" << c1->real + c2->real << "," << c1->image + c2->image << ")" << endl;
}
int main()
{
add1(&c1,&c2);
}
(3)输出r1和r2相反数的和
void add2(Complex* c1,Complex* c2)
{
cout << "(" << c1->real + c2->opposite_real() << "," << c1->image + c2->opposite_image() << ")" << endl;
}
int main()
{
add2(&c1,&c2);
}
(4)输出r2的实部和虚部
c2.print();
void Complex::print()
{
cout << "(" << real << "," << image << ")" << endl;
}
所有代码:
class Complex
{
friend void add1(Complex* c1,Complex* c2);
friend void add2(Complex* c1,Complex* c2);
private:
double real;
double image;
public:
Complex(double r, double i)//构造函数
{
real = r;
image = i;
}
double opposite_real()//返回实部的相反数
{
return real * (-1);
}
double opposite_image()//返回虚部的相反数
{
return image * (-1);
}
void print()//按格式打印的函数
{
cout << "(" << real << "," << image << ")" << endl;
}
};
//实现c1和c2相加的函数
void add1(Complex* c1,Complex* c2)
{
cout << "(" << c1->real + c2->real << "," << c1->image + c2->image << ")" << endl;
}
//实现c1和c2相反数相加的函数
void add2(Complex* c1,Complex* c2)
{
cout << "(" << c1->real + c2->opposite_real() << "," << c1->image + c2->opposite_image() << ")" << endl;
}
int main()
{
double r1, i1, r2, i2;
cin >> r1 >> i1 >> r2 >> i2;
Complex c1(r1,i1);
Complex c2(r2,i2);
add1(&c1, &c2);
add2(&c1, &c2);
c2.print();
return 0;
}
总结:本题考察了构造函数初始化私有成员,全局函数做友元函数,访问私有成员的方法等等,还是非常考察基本功的。
最后附上运行截图: