c++ - 为什么我的回推功能不起作用,只是出现段错误

标签 c++ dynamic constructor copy overloading

我是一个 C++ 菜鸟,我试图更好地理解我所涵盖的代码,所以我构建了这个类来学习重载运算符以及推回和弹出函数的基础知识,即制作我自己的变量数组。这不是类作业,我只是想自学代码。

这实际上是我做的一个计算机科学编程测试题,我试图从中学习,以防他们再次向我抛出类似的问题。我开始使用 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

最佳答案

这不会有太大帮助,但有太多次优的东西让我无法进入。

如果这是一项编程练习,那么您确实需要想出更好的设计。我会避免使用 new 和 delete 的原始指针,研究智能指针。

如果您真的打算使用它,我不会让标准提供满足您需求的类型。

#include <vector>
:::
std::vector<int> i5(5); //five ints
i5.push_back(6); //now six
i5.pop_back(); //five again
i5.clear(); //non

关于c++ - 为什么我的回推功能不起作用,只是出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9458508/

相关文章:

c++ - Visual C++ 2015 中的 SIGINT 处理程序重置

bash - 如何读出动态声明的 bash 变量的值?

c++ - 根据参数数量调用mixin基类的构造方法

c++ - 稍后在 C++ 中调用基类构造函数(不在初始化列表中)

c++ - 在 C++ 中对非 POD 类型使用 sizeof 运算符是否安全

c++ - 如何在不使用外部库的情况下使用 SDL 绘制线条

c# - 将可变参数传递给委托(delegate)

c++ - 返回值优化的魔力是什么?

c++ - .def 文件 C/C++ DLL

c++ - 指向对象指针的动态数组的指针