当前位置:编程学习 > C/C++ >>

C++构造函数和析构函数的使用问题

作业题目是要学会使用构造函数和析构函数

我自己编译了一个程序,可是有几处错误,希望高手指点一下
我的程序是这样的:
#include<iostream.h>
class CArray{
int nSizeOfInt; //整形数组的大小
int nNumOfInt; //整形数组中实际存放的元素个数
int nSizeOfFloat; //浮点数组的大小
float nNumOfFloat; //浮点数组中实际存放的元素个数
int *pInt; //指向整形数组,动态分配内存空间
int *pFloat; //指向浮点数组,动态分配内存空间
public:
CArray(int nIntSize=100,int nFloatSize=200):
void put(int n); //将n加入到整形数组中
void put(float x); //将x加入到浮点数组中
int getInt(int index)

//取整形数组中第index个元素,index从0开始
{
return(pInt[index]);
}

float getFloat(int index)

// re取浮点数组中第index个元素,index从0开始


{
turn(pFloat[index]);
}
~CArray(); //析构函数,释放动态分配的内存空间
void print(); //分别输出整形数组和浮点数组中的所有元素
};

CArray::CArray(int nIntSize,int nFloatSize)
{
nSizeOfInt=nIntSize;
nSizeOfFloat=nFloatSize;
int *pInt=new int [nSizeOfInt];
float *pFloat=new float[nSizeOfFloat];
nNumOfInt=0;
nNumOfFloat=0;
}
void CArray::put(int n)
{
if(nNumOfInt<nSizeOfInt)
{
pInt[nNumOfInt]=n;
nNumOfInt++;
}
else
{
cout<<"overflow";
}
}

void CArray::put(float x)
{
if(nNumOfFloat<nSizeOfFloat)
{
pFloat[nNumOfFloat]=x;
nNumOfFloat++;
}
else
{
cout<<"overflow";
}
}


CArray::~CArray()
{
delete []pInt;
delete []pFloat;
}

void CArray::print()
{
for(int i=0;i<nNumOfInt;i++)
cout<<pInt[i]<<", ";
cout<<endl;
for(int j=0;j<nNumOfFloat;j++)
cout<<pFloat[j]<<", ";
}

int main()
{
CArray s(20,40);
s.put(1);
s.put(2);
s.put(3);
s.put(1.0);
s.put(2.0);
s.put(3.0);
s.print();
cout<<"整形数组中第2个元素:"<<s.getInt(2)<<endl;
cout<<"浮点数组中第3个元素:"<<s.getFloat(3)<<endl;

return 0;
}

错误提示:error C2969: syntax error : ';' : expected member function definition to end with '}'
error C2511: 'put' : overloaded member function 'void (int)' not found in 'CArray'

E:\\C++程序的收藏\\实验\\实验三.cpp(2) : see declaration of 'CArray'
error C2108: subscript is not of integral type
error C2440: '=' : cannot convert from 'float' to 'int *'
答案:注意我和你有些地方写法不太一样,构造函数我一般喜欢这样写。
#include&lt;iostream.h&gt;
class CArray{

public:
int nSizeOfInt; //整形数组的大小
int nNumOfInt; //整形数组中实际存放的元素个数
int nSizeOfFloat; //浮点数组的大小
int nNumOfFloat; //浮点数组中实际存放的元素个数 !!更改为int
int *pInt; //指向整形数组,动态分配内存空间
float *pFloat; //指向浮点数组,动态分配内存空间
CArray();//我有两个构造函数,重载了。
CArray(int nIntSize,int nFloatSize);
void put(int n); //将n加入到整形数组中

void put(float x); //将x加入到浮点数组中

int getInt(int index) //取整形数组中第index个元素,index从0开始

{

return(pInt[index]);

}
float getFloat(int index) // re取浮点数组中第index个元素,index从0开始

{

return(pFloat[index]); //return!!!
}

~CArray(); //析构函数,释放动态分配的内存空间

void print(); //分别输出整形数组和浮点数组中的所有元素
};

CArray::CArray()
{
this-&gt;nSizeOfInt=100;this-&gt;nSizeOfFloat=200;//指向操作符
}
CArray::CArray(int nIntSize,int nFloatSize)
{
this-&gt;nSizeOfInt=nIntSize; //同上
this-&gt;nSizeOfFloat=nFloatSize;
pInt=new int [nSizeOfInt]; //不用再加int了,前面已经定义了
pFloat=new float[nSizeOfFloat];
nNumOfInt=0;
nNumOfFloat=0;
}
void CArray::put(int n)
{
if(nNumOfInt&lt;nSizeOfInt)
{
pInt[nNumOfInt]=n;
nNumOfInt++;
}
else
{
cout&lt;&lt;"overflow";
}
}


void CArray::put(float x)
{
if(nNumOfFloat&lt;nSizeOfFloat)
{
pFloat[nNumOfFloat]=x;
nNumOfFloat++;
}
else
{
cout&lt;&lt;"overflow";
}
}


CArray::~CArray()
{
delete []pInt;
delete []pFloat;
}


void CArray::print()
{
for(int i=0;i&lt;nNumOfInt;i++)
cout&lt;&lt;pInt[i]&lt;&lt;", ";
cout&lt;&lt;endl;
for(int j=0;j&lt;nNumOfFloat;j++)
cout&lt;&lt;pFloat[j]&lt;&lt;", ";
cout&lt;&lt;endl;//加一换行
}


int main()
{
CArray s(20,40);
s.put(1);
s.put(2);
s.put(3);
s.put(1.0f); //必须增加f!!!
s.put(2.0f);
s.put(3.0f);
s.put(5.8f);//我给你增加了一个元素,因为你要访问下标3,要有四个元素
s.print();
cout&lt;&lt;"整形数组中第2个元素:"&lt;&lt;s.getInt(2)&lt;&lt;endl;
cout&lt;&lt;"浮点数组中第3个元素:"&lt;&lt;s.getFloat(3)&lt;&lt;endl; //下标3是第四个元素,我给你增加了一个元素
return 0;
}

上一个:电话簿管理程序设计(一定用c++)
下一个:关于C++订单管理保存订单信息代码

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,