c++基础编程,谢谢了。
IntList.cpp.//IntList表示装有n个整数的list.#include"IntList.h"#include<iostream>usingnamespac...
IntList.cpp. //IntList表示装有n个整数的list.
#include "IntList.h"
#include <iostream>
using namespace std;
//constructor
IntList::IntList(int numVals, int val)
{
if(numVals > 0){
numberValues = numVals;
values = new int[numVals];
for(int i = 0;i < numVals; i++)
values[i] = val;
}
else
numberValues = 0;
}
//desctructor
IntList::~IntList()
{
delete [] values;
}
int IntList:: size()const
{
return numberValues;
}
void IntList:: push_back(int val)
{
numberValues++;
int* intList = new int[numberValues];
for(int i = 0;i < numberValues-1; i++)
intList[i] = values[i];
intList[numberValues -1] = val;
delete [] values;
values = new int[numberValues];
for(int i = 0;i < numberValues; i++)
values[i] = intList[i];
}
int& IntList:: vString()const
{
return *values;
}
main.cpp
int main()
{
IntList a(5,4);
a.push_back(9);
for(int i = 0;i<a.size();i++){
cout << a.vString() << " ";
}
return 0;
}
在main()中调用pushback()函数后,输出为6个4,在pushback()中输出正确。
如果把 int *values 声明为public,能正确输出,难道是IntList.cpp中的vString()函数出错了。 展开
#include "IntList.h"
#include <iostream>
using namespace std;
//constructor
IntList::IntList(int numVals, int val)
{
if(numVals > 0){
numberValues = numVals;
values = new int[numVals];
for(int i = 0;i < numVals; i++)
values[i] = val;
}
else
numberValues = 0;
}
//desctructor
IntList::~IntList()
{
delete [] values;
}
int IntList:: size()const
{
return numberValues;
}
void IntList:: push_back(int val)
{
numberValues++;
int* intList = new int[numberValues];
for(int i = 0;i < numberValues-1; i++)
intList[i] = values[i];
intList[numberValues -1] = val;
delete [] values;
values = new int[numberValues];
for(int i = 0;i < numberValues; i++)
values[i] = intList[i];
}
int& IntList:: vString()const
{
return *values;
}
main.cpp
int main()
{
IntList a(5,4);
a.push_back(9);
for(int i = 0;i<a.size();i++){
cout << a.vString() << " ";
}
return 0;
}
在main()中调用pushback()函数后,输出为6个4,在pushback()中输出正确。
如果把 int *values 声明为public,能正确输出,难道是IntList.cpp中的vString()函数出错了。 展开
展开全部
你的函数写的各种错误……
先说你问的问题吧。
首先,你的函数返回类型写错了。int&表示返回一个int引用。但事实上是返回了一个指针。所以应该是int*才对。
然后再来说说你其他的错误。
第一个,析构函数。你不做判断的直接delete[]。从你的构造函数可以看到,你是有可能构造一个不初始化values的实例的。此时出现析构就会出错。
第二个,内存泄漏。在pushback函数中你做了这个动作int* intList = new int[numberValues];,但是没有对intlist做内存释放。
第三个,性能考虑。这个不算错误了。在做pushback的时候,你是通过先申请一个大一点的内存在将原来的数值拷贝过去的方式。我们先不说这种思路的问题,就说拷贝你也可以使用内置函数memcpy来增加效率。再说这个方式本身。你应该借鉴标准库的思路,一次性申请大内存,但仅适用中间的一部分。在添加数据的时候只有在内存不足的时候才再次申请内存。
先说你问的问题吧。
首先,你的函数返回类型写错了。int&表示返回一个int引用。但事实上是返回了一个指针。所以应该是int*才对。
然后再来说说你其他的错误。
第一个,析构函数。你不做判断的直接delete[]。从你的构造函数可以看到,你是有可能构造一个不初始化values的实例的。此时出现析构就会出错。
第二个,内存泄漏。在pushback函数中你做了这个动作int* intList = new int[numberValues];,但是没有对intlist做内存释放。
第三个,性能考虑。这个不算错误了。在做pushback的时候,你是通过先申请一个大一点的内存在将原来的数值拷贝过去的方式。我们先不说这种思路的问题,就说拷贝你也可以使用内置函数memcpy来增加效率。再说这个方式本身。你应该借鉴标准库的思路,一次性申请大内存,但仅适用中间的一部分。在添加数据的时候只有在内存不足的时候才再次申请内存。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询