《数据结构》实验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++面向对象程序设计 陈维兴 陈昕编著 人民邮电出版社
复习巩固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++面向对象程序设计 陈维兴 陈昕编著 人民邮电出版社
相关文章推荐
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- 数据结构之Treap详解
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
- java数据结构和算法学习之汉诺塔示例
- Java数据结构及算法实例:三角数字
- Java数据结构之简单链表的定义与实现方法示例
- 数据结构之AVL树详解
- qqwry.dat的数据结构图文解释第1/2页
- JavaScript中数据结构与算法(五):经典KMP算法