Как я могу создать геттер и сеттер для вектора в C ++? - PullRequest
0 голосов
/ 03 октября 2011

Я объявил vector<test*> test1; как частное, и я хотел бы создать для этого getter и setter.Я пробовал,

void setV(vector<test*> test1)
{
    test1 = test1;
}

vector<test*> getV()
{
    return test1;
}

Работает, но работает очень странно.Есть ли другой способ сделать это?

Спасибо

Ответы [ 2 ]

9 голосов
/ 03 октября 2011

Посмотрите на оператор присваивания в setV:

test1 = test1;

Закрытая переменная test1 скрывается за параметром функции с тем же именем, и вы назначаете этот параметр себе.

Вы должны определить setV так:

void setV(vector<test*> const &newTest1) {
  test1 = newTest1;
}

Таким образом, вы действительно присваиваете параметр закрытой переменной, а использование ссылки const для параметра позволяет избежать ненужной временной копии.


Кроме того, вы должны определить getV как const и вернуть ссылку const:

vector<test*> const &getV() const {
  return test1;
}

Таким образом, он может быть вызван на const экземпляре вашего класса, и это позволяет избежать создания ненужной копии возвращаемого значения.

(Вы также можете определить другое getV, без const s, если вы хотите, чтобы вызывающая сторона могла изменять вектор неконстантного экземпляра вашего класса.)

2 голосов
/ 03 октября 2011

В сочетании с более ранним ответом вы также захотите превратить ваш геттер в передачу по ссылке (поскольку передача по копии может быть медленнее):

const vector<test *> &getV(){return test1;} //This will provide a read-only reference to your vector.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...