C ++: объявление указателя на массив в классе? - PullRequest
0 голосов
/ 24 сентября 2019

Я немного запутался в решениях учителя для этой задачи, указанных ниже.

Я думал, что когда вы объявляете переменную-указатель, а затем устанавливаете массив, вы делаете что-то вроде:

char *myPointer;

И затем, возможно, в конструкторе вы делаете что-то вроде

myPointer = new char[20];

, почему объявляете символ char * [20] как переменную члена класса?Что это означает?Если это статический массив, почему бы просто не объявить символ char [20];?

Вопрос и решение

Предположим, что класс акций имеет символ (char *), стоимость (int) и акции (int) как частные члены.Запишите декларации минимального класса акций, поддерживающие акции s2 («APPL», 209, 7), s3 («FB», 80);// 7 долей APPL по 209 долл. США, 5 долей FB по 80 долл. << подсказка: действительно минимум… никаких других функций… >> << подсказка: упростите… предположим, что символ может содержать не более 20 символов… >>

class stock {
public:
stock(char * s, int c, int sh=5);
private:
char * symbol[20];
int cost;
int shares;
}

Напишите функции реализации для вышеуказанного объявления


stock::stock(char *s, int c, int sh) {
    strcpy(symbol, s);  // or other means of deep copy, no point if no deep copy
    cost = c;
    shares = s;
}


`````````````````````

Ответы [ 2 ]

1 голос
/ 24 сентября 2019

Что означает [char *symbol[20]] точно?

Это означает массив из 20 указателей на char.

зачем объявлять [что] как переменная-член класса?

В общем: она может быть объявлена ​​в тех случаях, когда классу необходимо иметь 20 указателей, к которым может обращаться индекс.Для этого и нужны массивы.

В случае конкретной проблемы: нет смысла иметь массив из 20 указателей для ссылки на одну строку.

Если это статическиймассив,

Это не "статично".Это (нестатическая) переменная-член.

почему бы просто не объявить char symbol[20];

В общем: потому что массив символов - это совсем не то, чтомассив указателей.Не сразу очевидно, как проблему, которую можно решить с помощью 20 указателей, можно легко решить с помощью 20 символов.

В случае конкретной проблемы: это имеет больше смысла, чем массив указателей.Недостатком является то, что размер ограничен 20 символами, поэтому на практике это бесполезно, но в рамках упражнения этого будет достаточно.Для практического использования лучше использовать std::string, поскольку оно не ограничено произвольной длиной.

Вкратце: предположительно, в данном классе есть ошибка.

1 голос
/ 24 сентября 2019

Вы совершенно правы, нет необходимости делать symbol массив указателей на символы.Вы передаете строку (например, «APPL»), которая представляет собой массив символов, поэтому symbol должен быть массивом char, а не массивом char*.

Что char* symbol[20] can означает, что это массив из 20 строк, где каждый указатель в массиве может указывать на начало массива char.

То, что вы действительно должны использовать, это std::string, но если ваш учитель еще не рассказал об этом, тогда просто char symbol[20] в порядке.

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