题目和所需完成功能函数如下:
建立一维数组数据结构的模板类,使一维数组中的数据元素可以是char,int,float等多种数据类型,类中的成员函数主要包括:
(1)排序函数,能够对数组元素进行升序排列;
(2)查找函数,能够在输入待查元素后,输出其在数组中的下标;
(3)构造函数,初始化输入数组元素,这里要求数组元素的个数n是一个变量;
(4)析构函数,释放数组元素所占用的堆内存;
(5)Set函数,可以为指定的数组元素赋值;
(6)Get函数,可以读取指定数组元素的值;
(7)Print函数,可以输出数组元素的值;
(8)编写一个测试该模板类的程序。
首先附上C++源程序代码:
以下程序为一维数组类模板的实现:
template<class T>//定义数组类模板
class Array
{ public:
int size;//定义数组的大小
T *aptr;//定义数组指针
int i;
Array(int slots=1)//定义带参数的构造函数,初始化数组
{
size=slots;
aptr=new T[slots];//为数组申请空间
cout<<"输入"<<size<<"个数据:"<<endl;
for (int i=0;i<size;i++)//输入数组的值
cin>>aptr[i];
}
void Print();//输出数组函数
void Sort();//数组值升序排列函数
void Look_for(T x);//按值查找函数
void Set(T x,int i);//为指定的数组元素赋值函数
void Get(int i);//读取指定的数组元素
~Array()
{
delete[]aptr;
}};
template<class T>
void Array<T>::Print()
{
cout<<"数组为:"<<endl;
for(i=0;i<size;i++)
cout<<aptr[i]<<" ";
cout<<endl;}
template<class T>
//升序排列函数,采用了冒泡排序法
void Array<T>::Sort()
{
int i,j,temp;
for (j=0;j<size-1;j++)
for (i=0;i<size-1-j;i++)
if(aptr[i]>aptr[i+1])
{ temp=aptr[i];
aptr[i]=aptr[i+1];
aptr[i+1]=temp;}
cout<<"升序排列后的数组:"<<endl;
for(i=0;i<size;i++)
cout<<aptr[i]<<" ";
cout<<endl;}
template<class T>
//按值查找函数
void Array<T>::Look_for(T x)
{
int i=0;
//改元素存在时输出该元素的位置
while((i<size)&&(aptr[i]!=x))
i++;
if(i<size)
cout<<"要查找的数所在的位置为:"<<i+1<<endl;
else //改元素不存在时输出“不存在这个数!”}
template<class T>
//为指定的元素赋值函数
void Array<T>::Set(T x,int i)
{
if(i<size+1) //该位置存在时为该位置赋新值
{aptr[i-1]=x;
cout<<"把第"<<i<<"个数赋值为"<<x<<"后";}
else //该位置不存在时输出“不存在此位置!”
{cout<<"不存在此位置!"<<endl;
cout<<"此时";}}
template<class T>
//读取指定位置的数组元素函数
void Array<T>::Get(int c)
{
if(i<size+1)//查找此位置,此位置存在输出这个位置的数
{
cout<<"数组中第"<<c<<"个元素的值为:"<<endl;
cout<<aptr[c-1]<<endl;}
else //此位置不存在时,输出“此位置不存在!”
cout<<"此位置不存在!"<<endl;}
以下程序为一维数组类模板设计的主函数:
int main()
{
int n;
cout<<"请输入您想输入的数据个数"<<endl;
cin>>n;
Array<int>ai(n);
//定义一个整型的数组对象,含7个元素,同时调用构造函数
int x,a,b,c;
ai.Print();//调用类中的输出成员函数
ai.Sort();//调用类中的排序成员函数
cout<<"输入要查找的数:"<<endl;
cin>>x;
ai.Look_for(x); //调用类中的按值查找成员函数函数
cout<<"输入要赋值的位置及值:"<<endl;
cin>>a>>b;
ai.Set(b,a); //调用类中的给指定的元素赋值成员函数
ai.Print();
cout<<"输入要取的值的位置:"<<endl;
cin>>c;
ai.Get(c);//调用类中的输出指定位置的成员函数
ai.Print();
return 0;}
MFC工程部分程序如下:
#include "stdafx.h"
#include "MFC__zjr.h"
#include "MFC__zjrDlg.h"
#include <iostream>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
该工程数据显示所需控件程序如下:
void CMFC__zjrDlg::OnChangeEdit1()
{
UpdateData();
cin>>m_ys1;
UpdateData(false);}
void CMFC__zjrDlg::OnChangeEdit2()
{
UpdateData();
cin>>m_ys2;
UpdateData(false);}
void CMFC__zjrDlg::OnChangeEdit3()
{
UpdateData();
cin>>m_ys3;
UpdateData(false);}
void CMFC__zjrDlg::OnChangeEdit4()
{
UpdateData();
cin>>m_ys4;
UpdateData(false);}
void CMFC__zjrDlg::OnChangeEdit5()
{
UpdateData();
cin>>m_ys5;
UpdateData(false);}
void CMFC__zjrDlg::OnChangeEdit6()
{
UpdateData();
cin>>m_ys6;
UpdateData(false);}
oid CMFC__zjrDlg::OnButton1()
{
UpdateData();
int aptr[6]={m_ys1,m_ys2,m_ys3,m_ys4,m_ys5,m_ys6};
m_ys1=aptr[0];
m_ys2=aptr[1];
m_ys3=aptr[2];
m_ys4=aptr[3];
m_ys5=aptr[4];
m_ys6=aptr[5];
UpdateData(false);}
该工程数据排序控件所需程序如下:
void CMFC__zjrDlg::OnButton2()
{
UpdateData();
int aptr[6]={m_ys1,m_ys2,m_ys3,m_ys4,m_ys5,m_ys6};
int i,j,temp;
for (j=0;j<6-1;j++)
{ for (i=0;i<6-1-j;i++)
{ if(aptr[i]>aptr[i+1])
{
temp=aptr[i];
aptr[i]=aptr[i+1];
aptr[i+1]=temp;
}}}
m_px1=aptr[0];
m_px2=aptr[1];
m_px3=aptr[2];
m_px4=aptr[3];
m_px5=aptr[4];
m_px6=aptr[5];
UpdateData(false);}
void CMFC__zjrDlg::OnChangeEdit7()
{}
void CMFC__zjrDlg::OnChangeEdit8()
{}
void CMFC__zjrDlg::OnChangeEdit9()
{}
void CMFC__zjrDlg::OnChangeEdit10()
{}
void CMFC__zjrDlg::OnChangeEdit11()
{}
void CMFC__zjrDlg::OnChangeEdit12()
{}
该工程数据查找所需控件程序如下:
void CMFC__zjrDlg::OnButton3()
{
UpdateData();
int aptr[6]={m_ys1,m_ys2,m_ys3,m_ys4,m_ys5,m_ys6};
if(m_chazhao1==1)
m_chazhao2=aptr[0];
if(m_chazhao1==2)
m_chazhao2=aptr[1];
if(m_chazhao1==3)
m_chazhao2=aptr[2];
if(m_chazhao1==4)
m_chazhao2=aptr[3];
if(m_chazhao1==5)
m_chazhao2=aptr[4];
if(m_chazhao1==6)
m_chazhao2=aptr[5];
UpdateData(false);
void CMFC__zjrDlg::OnChangeEdit13()
{ UpdateData();
cin>>m_chazhao1;
UpdateData(false);}
void CMFC__zjrDlg::OnChangeEdit14()
{
UpdateData();
UpdateData(false);}
该工程数据赋值所需控件程序如下:
void CMFC__zjrDlg::OnButton4()
{ UpdateData();
int aptr[6]={m_ys1,m_ys2,m_ys3,m_ys4,m_ys5,m_ys6};
if(m_fuzhi1==1)
{ aptr[0]=m_fuzhi2;
m_fuzhi3=aptr[0];
m_ys1=m_fuzhi2; }
if(m_fuzhi1==2)
{ aptr[1]=m_fuzhi2;
m_fuzhi3=aptr[1];
m_ys2=m_fuzhi2;}
if(m_fuzhi1==3)
{ aptr[2]=m_fuzhi2;
m_fuzhi3=aptr[2];
m_ys3=m_fuzhi2;}
if(m_fuzhi1==4)
{ aptr[3]=m_fuzhi2;
m_fuzhi3=aptr[3];
m_ys4=m_fuzhi2;}
if(m_fuzhi1==5)
{ aptr[4]=m_fuzhi2;
m_fuzhi3=aptr[4];
m_ys5=m_fuzhi2;}
if(m_fuzhi1==6)
{ aptr[5]=m_fuzhi2;
m_fuzhi3=aptr[5];
m_ys6=m_fuzhi2;}
UpdateData(false)}
void CMFC__zjrDlg::OnChangeEdit15()
{
UpdateData();
cin>>m_fuzhi1;
UpdateData(false);}
void CMFC__zjrDlg::OnChangeEdit16()
{
UpdateData();
cin>>m_fuzhi2;
UpdateData(false);}
void CMFC__zjrDlg::OnChangeEdit17()
{
UpdateData();
UpdateData(false);}
mfc工程的页面设计