一维数组类模板的设计与实现C++/MFC工程源码

本文介绍了一种使用C++实现的一维数组模板类,该类支持多种数据类型,并提供了排序、查找等功能。通过具体实例展示了如何使用此类进行数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目和所需完成功能函数如下:

建立一维数组数据结构的模板类,使一维数组中的数据元素可以是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工程的页面设计

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值