如何使用类方法设置单个类数组元素?

时间:2016-10-07 03:26:18

标签: c++ arrays getter-setter

我正在使用C ++,并尝试使用setter方法设置数组元素值。该数组是一个类私有成员:

class Boo{
  private:
     int *x;
  public:
     Boo();
     ~Boo();

     void setX(int,int);
     int getX(int);
}

Boo::Boo(){

  x = new int[1];
  x = 0;
}

void Boo::setX(int value, int index){
      //set condition for NULL 
      x[index] = value;
}

int Boo::getX(int index){

    if(x[index] == NULL) {cout<<"invalid index"<<end; return;}
    return x[index];
}

void test(){
    Boo *p = new Boo();

    p->setX(12,0);
    cout<<p->getX(0)<<endl;
}

我一直在尝试测试从'0'开始设置'x'的值(如test()),但它会崩溃。我想编写一个程序来运行循环计数,然后设置数组值。这可以通过这种方式实现吗?

2 个答案:

答案 0 :(得分:0)

Boo::Boo()
{
    x = new int[1];
    x = 0;
}

您无法在数组中设置值,因为在使用内存初始化之后,您已在构造函数中将数组的指针设置为null。

请使用x [0] = 0;而不是x = 0;

答案 1 :(得分:0)

不要在C ++中使用new

在这种情况下,您应该使用std::vector<int>

如果您想修改代码,除非使用std::vector

#include <cstddef>
#include <iostream>
#include <stdexcept>
#include <memory>
using std::size_t;

class Boo {
private:
    int *x;
    size_t size;
    size_t capacity;
public:
    Boo();
    ~Boo();
    void setX(int,size_t);
    int getX(size_t);
};
Boo::Boo() : size(), capacity(1) {
    this->x = new int[1];
    //x = 0;//DO NOT ASSIGN NULL POINTER!!!!
}
Boo::~Boo() noexcept {
    delete[] x;
}
void Boo::setX(int value, size_t index){
    if(this->capacity <= index) throw std::out_of_range("Boo::setX");//YOU MUST CHECK RANGE
    this->x[index] = value;
    ++this->size;
}

int Boo::getX(size_t index){
    if(this->size <= index) throw std::out_of_range("Boo::getX");//YOU MUST CHECK RANGE
    return x[index];
}

void test(){
    auto p = std::make_unique<Boo>();
    p->setX(12,0);
    std::cout << p->getX(0) << std::endl;
}
int main(){
    test();
}

http://melpon.org/wandbox/permlink/aIhwC5c9o1q8ygIo