抽象数据类型
下面这个例子是关于复数的一个抽象数据类型(Abstract Data Type,ADT)。所谓抽象数据类型,由三部分构成:
- 数据对象:c1
- 数据关系:x是c1的实部,y是c1的虚部
- 基本操作:求实部、求虚部、求和、求差
#include <stdio.h>
//Complex类型定义
typedef struct{
float Realpart;
float Imagepart;
}Complex;
//函数声明
void Create(Complex &C, float x, float y);
float GetReal(Complex C);
float GetImage(Complex C);
Complex Add(Complex C1,Complex c2);
Complex Sub(Complex C1,Complex c2);
//主函数
int main()
{
Complex c1;
float x,y;
x = 1;
y = -1;
Create(c1,x,y);
printf("实部为:%f\n",c1.Realpart);
printf("虚部为:%f\n",GetImage(c1));
return 0;
}
//函数定义
void Create(Complex &C, float x, float y)
{
C.Realpart = x;
C.Imagepart = y;
}
float GetReal(Complex C)
{
return C.Realpart;
}
float GetImage(Complex C)
{
return C.Imagepart;
}
Complex Add(Complex C1,Complex C2)
{
Complex sum;
sum.Imagepart = C1.Imagepart + C2.Imagepart;
sum.Realpart = C1.Realpart+ C2.Realpart;
return sum;
}
Complex Sub(Complex C1,Complex C2)
{
Complex difference;
difference.Imagepart = C1.Imagepart - C2.Imagepart;
difference.Realpart = C1.Realpart - C2.Realpart;
return difference;
}
Q1:为什么Create定义时C前面要加&?&在这什么意思?
这里&是引用,引用是C++的用法,是给一个变量起了别名。使用引用的方式传入参数,能够使函数执行完能返回值。这和传入指针很像
写成Complex &C后,执行Create(c1,x,y)相当于给c1起了别名C,从而对C的操作就是对c1的操作,而如果写成Complex C,C作为一个形参,函数执行完C就不存在了,而c1不会有任何变化。[详细解释click here]