我是這樣一個C++ noob和即時通訊試圖瞭解代碼即時通訊覆蓋更好,所以我建立這個類來學習重載操作符的基本原理以及推回和彈出功能,即使我自己的變量數組。這不是一個班級任務,我只是試圖教自己的代碼。爲什麼我的回推函數不起作用,只是得到一個seg故障
這實際上是一個計算機科學編程測試問題,我做了,我試圖從中學習,以防萬一他們再次拋出類似的東西。我從java開始,現在在做C++。
#include"IntArray.h"
#include<iostream>
using namespace std;
IntArray::IntArray()
{
size=0;
capacity=1;
data = new int[capacity];
cout<<"constructor fired off"<<endl;
}
IntArray::~IntArray()
{
delete [] data;
cout<<"Destructor fired off"<<endl;
}
IntArray::IntArray (const IntArray & m)
{
size=m.size;
capacity=m.capacity;
data= new int[capacity];
cout<<"copy constructor fired off"<<endl;
}
IntArray IntArray::operator= (const IntArray & other)
{
cout<<"operator= fired off"<<endl;
if(this != &other)//comparing the addresses
{
delete [] data;
size= other.size;
capacity = other.capacity;
data = new int[capacity];
for (int index=0; index<size; index++)
{
data[index]=other.data[index];
}
}
return *this;
}
int& IntArray::operator[] (int n)
{
if(n<0||n>=size)
{
cout<<"Array not big enough"<<endl;
return n;
}
IntArray a;
return a[n];
}
IntArray& IntArray::push_back(int n)
{
data[size]=n;
size++;
if(size==capacity)
capacity=capacity*2;
return *this;
}
IntArray& IntArray::pop_back()
{
if(size>0)
size--;
}
double IntArray::average()
{
double sum=0;
int count=0;
for(int index=0; index<size; index++)
{
sum+=data[index];
count++;
}
return sum/count;
}
int IntArray::getSize()
{
return size;
}
int IntArray::getCapacity()
{
return capacity;
}
我的.h文件
#ifndef INTARRAY_H_INCLUDED
#define INTARRAY_H_INCLUDED
class IntArray
{
private:
int size;
int capacity;
int *data;
public:
IntArray();
~IntArray();
IntArray (const IntArray &);
IntArray operator= (const IntArray &);
int& operator[] (int);
IntArray& push_back(int);
IntArray& pop_back();
double average();
int getSize();
int getCapacity();
};
#endif // INTARRAY_H_INCLUDED
如果你真的是「noob」,那麼你不應該使用任何原始指針或「新」!這些都是先進的和利基的話題。 – 2012-02-26 23:58:59
請記住,Java和C++ *非常*不同(您的代碼看起來像Java)。 – 2012-02-27 00:05:47
您的'push_back'永遠不會改變分配數據的大小,並且會愉快地寫入當前數據塊的末尾。 – Blastfurnace 2012-02-27 00:11:28