实现抽象数据类型的定义(C语言)
1、复数的实现
步骤:
a>定义复数结构体
b>构造初始化复数结构体
c>编写函数
d>主函数测试
#include <stdio.h>
//用typedf关键字把struct Complex起了个名字交complex
typedef struct Complex {
float realPart;//实部
float imagePart;//虚部
} complex;
complex assign(float real, float image) {//类似于Java的构造方法
//构造一个复数
complex c;
c.realPart = real;
c.imagePart = image;
return c;
}
//可忽略
/*float getReal(struct Complex C) {//类似于get方法
//取复数C=x+yi的实部
return C.realPart;
}
float getImage(struct Complex C) {
//取复数C=x+yi的虚部
return C.imagePart;
}*/
//求两个复数c1和c2的和sum
struct Complex add(struct Complex c1, struct Complex c2) {
struct Complex sum;
sum.realPart = c1.realPart + c2.realPart;
sum.imagePart = c1.imagePart + c2.imagePart;
return sum;
}
//求两个复数c1和c2的差minus
struct Complex minus(struct Complex c1,struct Complex c2){
struct Complex minus;
minus.realPart = c1.realPart - c2.realPart;
minus.imagePart = c1.imagePart - c2.imagePart;
return minus;
}
//主函数
int main(){
complex c1,c2,c3,c4;
c1= assign(1.0,2.0);
c2= assign(3.0,5.0);
c3= add(c1,c2);
c4= minus(c1,c2);
printf("c1+c2的和:(%.1f)+(%.1f)i\n",c3.realPart,c3.imagePart);
printf("c1+c2的差:(%.1f)+(%.1f)i\n",c4.realPart,c4.imagePart);
}
2、圆的定义的实现
步骤:
a>定义园结构体
b>构造初始化园结构体
c>编写函数
d>主函数测试
typedef struct{
double r;
double x,y,p=3.14;
}Circle;
Circle cir(double R,double X,double Y){
Circle C;
C.r=R;
C.x=X;
C.y=Y;
return C;
}
double area(Circle C){
double a=C.p*(C.r*C.r);
return a;
}
double circumference(Circle C){
double c=2*C.p*C.r;
return c;
}
int main(){
Circle z1;
double z2,z3;
z1=cir(1.0,1.0,1.0);
z2=area(z1);
z3=circumference(z1);
printf("圆的半径R:%.1f\n坐标轴X:%.1f\tY:%.1f\n",z1.r,z1.x,z1.y);
printf("圆的面积:%5.2f\n",z2);
printf("圆的周长:%5.2f\n",z3);
return 0;
}
3.小结
抽象数据类型的概念与面向对象方法的思想是一致的。抽象数据类型独立于具体实现,将数据和操作封装在一起,使得用户程序只能通过抽象数据类型定义的某些操作来访问其中的数据,从而实现了信息隐藏。在C++中,我们可以用类的声明表示抽象数据类型,用类的实现来实现抽象数据类型。因此,C++中实现的类相当于数据的存储结构及其在存储结构上实现的对数据的操作。