模板类

liubingyu / 2023-05-09 / 原文

1、复数类Complex有两个数据成员:ab, 分别代表复数的实部和虚部,并有若干构造函数和一个重载-(减号,用于计算两个复数的距离)的成员函数。 要求设计一个函数模板

template < class T >

double dist(T a, T b)

intfloatComplex或者其他类型的数据,返回两个数据的间距。

以上类名和函数模板的形式,均须按照题目要求,不得修改

输入格式:

每一行为一个操作,每行的第一个数字为元素类型,1为整型元素,2为浮点型元素,3Complex类型,若为整型元素,接着输入两个整型数据,若为浮点型元素,接着输入两个浮点型数据,若为Complex型元素,输入两个Complex型数据(a1 b1 a2 b2),输入0时标志输入结束。

输出格式:

对每个输入,每行输出一个间距值。

输入样例:

1 2 5

3 2 4 5 9

2 2.2 9.9

0

 

输出样例:

3

5.83095

7.7

 1 1.#include<iostream>
 2 #include<math.h>
 3 using namespace std;
 4 template <class T>
 5 double dist(T a,T b){
 6  double distance=a-b;
 7  return fabs(distance);
 8 }
 9 class Complex{
10  private:
11   double real;
12   double image;
13  public:
14   Complex(double r=0,double i=0){
15    real=r;
16    image=i;
17   }
18  double operator-(Complex p){
19      double distance=0;
20      double t=(real-p.real)*(real-p.real)+(image-p.image)*(image-p.image);
21      distance=sqrt(t);
22      return distance;
23     }
24 };
25 int main(){
26  int ch=0;
27  while (cin>>ch){
28   if(ch==0)
29      break;
30   else if(ch==1){
31    int a,b,distance;
32    cin>>a>>b;
33    distance=dist(a,b);
34    cout<<distance<<endl;
35   }
36   else if(ch==2){
37    float a,b;
38    double distance;
39    cin>>a>>b;
40    distance=dist(a,b);
41    cout<<distance<<endl;
42   }
43   else if(ch=3){
44    double a,b,c,d,distance;
45    cin>>a>>b>>c>>d;
46    Complex p1(a,b),p2(c,d);
47    distance=dist(p1,p2);
48    cout<<distance<<endl;
49   }
50  }
51  return 0;
52 }