一道十分考验类与对象基本功的题

先读题:

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;
}

总结:本题考察了构造函数初始化私有成员,全局函数做友元函数,访问私有成员的方法等等,还是非常考察基本功的。

最后附上运行截图:

一道十分考验类与对象基本功的题_第1张图片

你可能感兴趣的:(c++,开发语言)