本文已参与「新人创作礼」活动,一起开启掘金创作之路。
前言
本文为笔者大一《面向对象程序设计》课程章节实验报告,现将题目整理并分享,希望能够帮助正在学习C++的小伙伴!本文将学习到的编程技能包括:模板的用途、建立方法、使用
知识提纲
- 模板的用途
模板是实现代码重用机制的一种工具,它可以实现类型参数化,即把类型定义为参数,从而实现了真正的代码可重用性。
- 模板的建立
template <类型参数表>
class 类模板名{
成员函数和成员变量
};
- 模板的使用
类模板名<真实类型参数表> 对象名(构造函数实际参数表);
一、不同类型的三个数求最大值(使用template实现)
-
题目:用函数模板方法编写程序,对给各种不同类型的三个数分别求最大数。
-
代码
#include "pch.h"
#include <iostream>
#include <string>
using namespace std;
template <typename T>
class find_max
{
public:
find_max(T ma, T mb, T mc); //构造函数
T max();
void print();
private:
T a, b, c;
};
template<typename T>
find_max<T>::find_max(T ma, T mb, T mc)
{
a = ma, b = mb, c = mc;
}
template<typename T>
T find_max<T>::max()
{
T d=(a > b ? a : b);
return c > d ? c : d;
}
template<typename T>
void find_max<T>::print()
{
cout << a <<" "<< b<<" " << c<<endl;
}
int main()
{
find_max<int>A(3, 6, 1);
A.print();
cout<<"三个整数的最大值为:"<<A.max()<<endl;
find_max<double>B(3.4, 6.3, 1.7);
B.print();
cout << "三个小数的最大值为:" << B.max()<<endl;
find_max<string>C("Guangzhou", "Beijing", "Zhongguo");
C.print();
cout << "三个字符串的最大值为:"<<C.max()<<endl;
}
- 结果
二、数组运算与操作(使用template实现)
- 题目:创建一个类模板,可以对不同的数据类型的数组分别进行初始化、添加数据、求和、求平均值、显示数组等功能。
- 代码
#include "pch.h"
#include <iostream>
#include <string>
using namespace std;
template<typename T>
class Array
{
public:
Array(T *mp, int msize);
Array(int msize);
~Array();
void input();
T sum();
T average();
void print();
private:
int size;
T *p;
};
template<typename T>
Array<T>::Array(T *mp, int msize)
{
size = msize;
p = new T[msize];
for (int i = 0; i < msize; ++i)
{
p[i] = mp[i];
}
}
template<typename T>
Array<T>::Array(int msize)
{
size = msize;
}
template<typename T>
Array<T>::~Array()
{
delete[]p;
}
template<typename T>
void Array<T>::input()
{
p = new T[size];
cout << "请输入" << size << "个数据:";
for (int i = 0; i < size; ++i)
{
cin >> p[i];
}
}
template<typename T>
T Array<T>::sum()
{
T s = 0;
for (int i = 0; i < size; ++i)
{
s += p[i];
}
return s;
}
template<typename T>
T Array<T>::average()
{
T s = sum();
return s / size;
}
template<typename T>
void Array<T>::print()
{
cout << "数组数据如下:\n";
for (int i = 0; i < size; ++i)
{
cout << p[i] << ' ';
if ((i + 1) % 10 == 0) cout << '\n';
}
}
int main()
{
char op;
while (true)
{
cout << "选择默认初始化or自行添加数据(1 or 2): ";
cin >> op;
if (op == '1')
{
int p[] = { 1,2,3,4,5,6,7,8,9,10 };
Array<int>A(p, sizeof(p) / sizeof(int));
cout << "总和=" << A.sum() << endl;
cout << "平均值=" << A.average() << endl;
A.print();
double q[] = { 1.5,2.4,3.3,4.2,5.1,6.0,7.6,8.7,9.8,10.9 };
Array<double>B(q, sizeof(q) / sizeof(double));
cout << "总和=" << B.sum() << endl;
cout << "平均值=" << B.average() << endl;
B.print();
}
if (op == '2')
{
cout << "请输入要添加的数据类型(int or double):";
string type;
cin >> type;
if (type == "int")
{
int msize;
cout << "请输入数组元素个数:";
cin >> msize;
Array<int>C(msize);
C.input();
cout << "总和=" << C.sum() << endl;
cout << "平均值=" << C.average() << endl;
C.print();
cout << endl;
}
else if (type == "double")
{
int msize;
cout << "请输入数组元素个数:";
cin >> msize;
Array<double>D(msize);
D.input();
cout << "总和=" << D.sum() << endl;
cout << "平均值=" << D.average() << endl;
D.print();
cout << endl;
}
}
else
{
cout << "输入有误!\n";
continue;
}
}
}
- 结果