您的位置:首页 > 理论基础 > 数据结构算法

《数据结构》实验1

2015-10-05 16:35 232 查看
一..实验目的

     复习巩固VC编程环境的使用,以及C++模板设计。

1.回顾并掌握VC单文件结构程序设计过程。

2.回顾并掌握VC多文件工程设计过程

3.掌握VC程序调试过程。

4.回顾C++模板和模板的程序设计。

二..实验内容

1. 设计一个单文件结构程序完成从键盘输入两个数,输出二者的“和”和“积”的结果。要求如下:

        1)设计函数来计算“和”和“积”,在主函数中调用,并能考虑重载函数,使整数和小数均能计算。

        2)分别使用单步调试和断点调试来调试程序。并多次运行力求熟练调试方法。

源代码以及调试结果:

#include<iostream>

using namespace std;

int add(int a,int b)

{
return a+b;

}

int mul(int a,int b)

{
return a*b;

}

double add(double a,double b)

{
return a+b;

}

double mul(double a,double b)

{
return a*b;

}

int main()

{   
cout<<"3+4="<<add(3,4)<<endl;
cout<<"3*4="<<mul(3,4)<<endl;
cout<<"3.6+4.6="<<add(3.6,4.6)<<endl;
cout<<"3.6*4.6="<<mul(3.6,4.6)<<endl;
return 0;

}



2.使用函数的模板来实现上述功能。

源代码以及调试结果:

#include<iostream>

using namespace std;

template<typename T>

T add(T a,T b)

{
return a+b;

}

template<typename Tt>

Tt mul(Tt a,Tt b)

{
return a*b;

}

int main()

{   
cout<<"3+4="<<add(3,4)<<endl;
cout<<"3*4="<<mul(3,4)<<endl;
cout<<"3.6+4.6="<<add(3.6,4.6)<<endl;
cout<<"3.6*4.6="<<mul(3.6,4.6)<<endl;
return 0;

}



3.使用一个类来实现上述功能。要求:

  1)使用类模板

  2)使用多文件:类的声明有头文件中;类的函数定义一个源文件中,在主程序文件中设计主函数程序,在实例化输出结果。

源代码以及调试结果:

//头文件

template<class T>

class calcu

{

private:T num1, num2;

public:
calcu();
T add();
T mul();

};

//函数定义

#include<iostream>

#include"head.h"

using namespace std;

template<class T>

calcu<T>::calcu()

{
T a; T b;
cout << "请输入两个数:";
cin >> a >> b;
num1 = a; num2 = b;

}

template<class T>

T calcu<T>::add()

{
return num1 + num2;

}

template<class T>

T calcu<T>::mul()

{
return num1 * num2;

}

//主函数

#include"source.cpp"

int main()

{
calcu<float> aa;
cout << "两数之和为:" << aa.add() << endl;
cout << "两数之积为:" << aa.mul() << endl;
system("pause");
return 0;

}





三、总结

  模板是实现代码重用机制的一种工具,实现类型参数化,使得一段程序可以用于处理多种不同类型的对象。以上实验中,用模板使得一段程序既可处理整型加法(乘法)同时又能处理浮点型加法(乘法)。通过三段代码对比,明显看出利用模板机制可以显著减少冗余信息,大幅度节约程序代码,提高程序设计效率,进一步提高面向对象程序的可重用性和可维护性。

  两种函数模板的声明格式如下:

template<class 类型参数>

返回类型 函数名(模板形参表)
{
函数体
}

或者

template<typename 类型参数>
返回类型 函数名(模板形参表)
{
<
4000
span style="font-family:'宋体';white-space:pre;">函数体
}

其中,template是一个声明模板的关键字,它表示声明一个模板。类型参数实际上是一个虚拟的类型名,使用前并未制定他是哪一种具体的类型,但是用函数模板时,必须将类型参数实例化。

  同样的类模板声定义有以下两种形式:

template<class 类型参数>
class 类名
{
类成员声明
};



template<typename 类型参数>
class 类名
{
类成员声明
};

用类模板定义对象的形式:

类模板名<实际类型名>对象名(实参表列);

定义成员函数的形式:

template<typename 类型参数>
函数类型 类名<类型参数>::成员函数名(形参表)
{
成员函数体
};

参考资料:c++面向对象程序设计  陈维兴 陈昕编著  人民邮电出版社
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构