Пользовательский класс Vector, возвращает вектор как массив в C ++ - PullRequest
2 голосов
/ 18 апреля 2020

Я пытаюсь создать собственный векторный класс и перегружаю все операторы. рассмотрим следующий код:

  template <class T>
  class vector{

     private:
     T * arrayOfObj;
     // other class members

    public:

     Vector(){
      arrayOfObj = new T[100];
     }
     vector(int size); 
     // other functions for vector class, overloaded [], =, etc.
    }

в другом классе, мне нужно вернуть вектор, но с указателем, как когда мы возвращаем массив:

   #include "B.h"
   class c {

     vector<B> vect;

     public:
     B * getArray(){
       return vect;
     }

Во-первых, возможно ли перезапустить вектор как массив? Кроме того, если я хотел получить доступ к динамическому массиву c, инкапсулированному внутри векторного класса, без использования функции publi c для возврата массива, каким должен быть мой подход?

1 Ответ

3 голосов
/ 18 апреля 2020

Во-первых, возможно ли перезапустить вектор как массив?

Конечно, это то, что делает std::vector::data(). Это так же просто, как сделать return arrayOfObj; в любой перегрузке метода или оператора.

Кроме того, если бы я хотел получить доступ к динамическому массиву c, инкапсулированному внутри векторного класса, без использования функции publi c чтобы вернуть массив, каким должен быть мой подход?

Невозможно. Либо вы разрешаете доступ к своему внутреннему хранилищу через функцию publi c, либо вы не разрешаете это, на ваш выбор. В c::getArray() вы также можете скопировать все элементы vect в новый массив - таким образом, никто не изменит vect извне, и вам не нужно предоставлять доступ к внутренней памяти класса vector.

Существует также механизм friend, который позволяет одной функции или классу получать доступ к закрытым членам другого класса, но обычно это хуже, чем publi c access .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...