Форум программистов, компьютерный форум CyberForum.ru

Перегрузка операции индексирования, вопрос по синтаксису - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
pauline
0 / 0 / 0
Регистрация: 17.07.2007
Сообщений: 5
07.11.2010, 20:24     Перегрузка операции индексирования, вопрос по синтаксису #1
Здравствуйте форумчане.
Должна сразу сказать, что в своей практике с С++ сталкивалась мало, поэтому в нем считаю себя новичком. Но все же решила я повторить основные принципы ООП по книге Т.А. Павловской С/С++ программирование для вузов.
Добралась до перегрузки операции индексирования ("[]") и вот здесь возник принципиальный вопрос не только в синтаксисе написанного (он скорее всего верный), но и в общем понимании что же происходит.
Для демонстрации перегрузки создается класс, который хранит массив целых чисел
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream.h>
#include <stdlib.h>
class Vect{
   public:
 explicit Vect (int n = 10);
 Vect(const int a[], int n); //инициализация массивом
 ~Vect(){delete [] p;}
 int& operator [] (int i);
 void Print;
...
 private 
   int* p;
   int size;
};
и далее идет определение методов класса
и здесь возникает вопрос в определении самого конструктора, оно выглядит так:
C++
1
2
3
  Vect::Vect(int n): size(n){
     p = new int[size];
}
Понятно, что после двоеточия поле size инициализируется значением n, но что значит запись
C++
1
  p = new int[size];
Инициализация указателя значением size??
и зачем тогда нужно создавать второй метод следующий за конструктором
C++
1
2
3
4
  Vect::Vect(const int a[], int n): size(n){
  p = new int[size];
  for(int i = 0; i<size; i++) p[i] = a[i];
}
Почему нельзя это сделать в одном конструкторе??
Буду очень рада, если кто-нибудь разъяснит.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2010, 20:24     Перегрузка операции индексирования, вопрос по синтаксису
Посмотрите здесь:

C++ Вопрос по синтаксису С++
C++ Вопрос по синтаксису
Вопрос по синтаксису языка C++
вопрос по синтаксису/типам C++
C++ перегрузка индексирования
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
07.11.2010, 20:32     Перегрузка операции индексирования, вопрос по синтаксису #2
Второе - это не метод, это тоже конструктор. В книге должно быть объяснено значение слова explicit

Не по теме:

Хотя, говорят, книга Т.А. Павловской - "бумагомарание", там даже основы кое как даны.

KpeHDeJIb
 Аватар для KpeHDeJIb
56 / 56 / 3
Регистрация: 31.10.2010
Сообщений: 103
07.11.2010, 20:38     Перегрузка операции индексирования, вопрос по синтаксису #3
Цитата Сообщение от Kastaneda Посмотреть сообщение
В книге должно быть объяснено значение слова explicit
Ну это к вопросу топик кастера напрямую не относится.

Цитата Сообщение от pauline Посмотреть сообщение
p = new int[size];
Это выделение динамической памяти, достаточной для хранения массива элементов типа int в количестве size штук.
pauline
0 / 0 / 0
Регистрация: 17.07.2007
Сообщений: 5
08.11.2010, 07:52  [ТС]     Перегрузка операции индексирования, вопрос по синтаксису #4
В книге должно быть объяснено значение слова explicit
Объяснение действительно есть.
Не по теме:
Хотя, говорят, книга Т.А. Павловской - "бумагомарание", там даже основы кое как даны.
Может тогда посоветуйте хорошую книгу по ООП, лучше конечно с примерами на С++
Kastaneda
Модератор
Эксперт С++
 Аватар для Kastaneda
4236 / 2769 / 218
Регистрация: 12.12.2009
Сообщений: 7,104
Записей в блоге: 1
Завершенные тесты: 1
08.11.2010, 09:27     Перегрузка операции индексирования, вопрос по синтаксису #5
Так по ООП или C++ ? Если по ООП с примерами на С++, то для начинающих советуют вот эту "Гради Буч "Объектно-ориентированный анализ и проектирование"", сам пока не прочитал (но собираюсь))
pauline
0 / 0 / 0
Регистрация: 17.07.2007
Сообщений: 5
08.11.2010, 09:49  [ТС]     Перегрузка операции индексирования, вопрос по синтаксису #6
Спасибо за совет.
Хоть ООП это и общая парадигма и реализована во многих языках, хотелось все-таки с примерами на С++
Язык сложный, и если разобрать примеры на нем, то думаю в других языках уже не запутаюсь. Впрочем тут можно и поспорить.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.11.2010, 09:58     Перегрузка операции индексирования, вопрос по синтаксису
Еще ссылки по теме:

C++ Перегрузка оператора индексирования
C++ Перегрузка оператора индексирования
Перегрузка операции >> C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
08.11.2010, 09:58     Перегрузка операции индексирования, вопрос по синтаксису #7
Цитата Сообщение от pauline Посмотреть сообщение
p = new int[size];
Выделение памяти под intы в количестве size и присваивание p указателя на эту память. Ничего общего с перегрузкой, тем более оператора индексации это не имеет.

Добавлено через 2 минуты
Цитата Сообщение от pauline Посмотреть сообщение
Инициализация указателя значением size??
и зачем тогда нужно создавать второй метод следующий за конструктором
Чтоб полностью иницировать массив, а не только зарезервировать под него место на основе размера. То есть чтоб сразу задать значения элементов. И это пока не методы, а конструкторы.

Добавлено через 6 минут
Цитата Сообщение от pauline Посмотреть сообщение
Хоть ООП это и общая парадигма и реализована во многих языках,
То то и оно, что это только парадигма, то есть всего лишь подход к программированию. В отрыве от языка её учить бесполезно. А вот учить программирование с использованием этого подхода и конкретного языка (c++ - вполне нормальный вариант) - имеет смысл. Поэтому учишь ООП - выбери язык (или согласись с чужим выбором). И не слушай тех, кто будет говорить, что парадигма от языка не зависит. Язык тоже от железа не зависит, а компилятор зависит.
Yandex
Объявления
08.11.2010, 09:58     Перегрузка операции индексирования, вопрос по синтаксису
Ответ Создать тему
Опции темы

Текущее время: 11:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru