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

Что за входным параметром DynamicArray(long s = 10): size(s), count(0)? - C++

Восстановить пароль Регистрация
 
evil0o
5 / 5 / 0
Регистрация: 04.07.2010
Сообщений: 200
02.02.2013, 23:53     Что за входным параметром DynamicArray(long s = 10): size(s), count(0)? #1
: size(s), count(0) объясните что это ?

C++
1
2
3
4
5
6
  //конструкторы
      DynamicArray(long s = 10): size(s), count(0) {   //<=======================что это?
          p = new T[size];
          if(!p)
             cout << "Ошибка при создании массива" << endl;
      }
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
template<class T>
class DynamicArray {
      long size;               //размер массива
      long count;              //количество элементов в массиве
      T* p;                    //указатель на начало массива
 
  public:
      //конструкторы
      DynamicArray(long s = 10): size(s), count(0) {
          p = new T[size];
          if(!p)
             cout << "Ошибка при создании массива" << endl;
      }
      DynamicArray(const DynamicArray& arr);    //конструктор копирования
 
      //деструктор
      ~DynamicArray() {
          if(p) delete[] p;
      }
 
      //функции
      void add(T x);                  //прибавить элемент в конец массива
      void remove();                          //удалить последний элемент
      long length() const {return size;}                 //длина массива
      void print() const;                                //вывод на экран
 
      //операторы
      DynamicArray& operator=(const DynamicArray& arr);  //присваивание
      T operator [] (long i) const;                      //индексация
      DynamicArray& operator+(const DynamicArray& arr);  //сложение
};
 Реализация функций и операторов: 
 
//копирующий конструктор
template<class T>
DynamicArray<T>::DynamicArray(const DynamicArray& arr) {
    size = arr.size;
    count = arr.count;
    p = new T[size];
    for(int i = 0; i<count; ++i)
        p[i] = arr.p[i];
}
 Здесь возвращаем значение по ссылке, чтобы можно было строить цепочку присваиваний: 
 
template<class T>
DynamicArray<T>&        
DynamicArray<T>::operator=(const DynamicArray& arr)
      if(this != &arr) {       //чтобы избежать присваивания самому себе
         size = arr.size;
         count = arr.count;
         if(p) delete[] p;
         p = new T[size];
         for(int i = 0; i<count; ++i) 
            p[i] = arr.p[i];
 
     }
     return *this;
}
 
template<class T>
T DynamicArray<T>::operator[](long i) const {
    if(i < size && i)
        return p[i-1];
    else
        cout << "Неправильный индекс" << endl;
    return 0;
}
 
template<class T>
DynamicArray<T>& 
DynamicArray<T>::operator+(const DynamicArray& arr) {
    DynamicArray temp(*this);  //сохраняем значения во временном массиве
    if(p) delete[] p;
    size += arr.size;
    count += arr.count;
    p = new T[size];
    for(int i = 0; i<temp.count; ++i)
         p[i] = temp.p[i];
    for(int i = 0; i<arr.count; ++i)
         p[temp.count + i] = arr.p[i];
    return *this;
}
 
template<class T>
void DynamicArray<T>::print() const {
    cout << "The array contains:" << endl;
    for(int i = 0; i<count; ++i)        
         cout << p[i] << ' ';
    cout << endl;
}
 
template<class T>
void DynamicArray<T>::add(T x) {
    if(count >= size) {
        //увеличиваем размер массива       
        DynamicArray temp(*this);
        if(p) delete[] p;
        size += 10;
        p = new T[size];
        for(int i = 0; i<temp.count; ++i)
            p[i] = temp.p[i];
    }
    p[count++] = x;           //прибавить элемент в конец массива
}
 
template<class T>
void DynamicArray<T>::remove() {
   if(count)
       p[--count] = 0;    //удалить последний элемент (если массив
                          //не пустой)
   else
       cout << "Массив пуст" << endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.02.2013, 23:53     Что за входным параметром DynamicArray(long s = 10): size(s), count(0)?
Посмотрите здесь:

Как сравнить long long с нулем? GNU С++ C++
C++ Что возвращает функция size()?
Перевести большой массив char в long long C++
C++ Есть ли аналоги для log и log10 с параметром типа long double?
C++ Преобразование массива char в массив long long
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Venzo
 Аватар для Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
03.02.2013, 01:08     Что за входным параметром DynamicArray(long s = 10): size(s), count(0)? #2
это список инициализации конструктора. При конструировании объекта, данные поля будут проинициализированы значением, указанным в скобках.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
03.02.2013, 01:12     Что за входным параметром DynamicArray(long s = 10): size(s), count(0)? #3
Конструктор по-умолчанию со списком инициализации. Если в него не передаются параметры, то используется значение по-умолчанию, прошу прощения за тавтологию. Про список инициализации написано выше.
evil0o
5 / 5 / 0
Регистрация: 04.07.2010
Сообщений: 200
03.02.2013, 02:18  [ТС]     Что за входным параметром DynamicArray(long s = 10): size(s), count(0)? #4
если можно то ссылку на статейку где про это говорится скинте
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
03.02.2013, 02:21     Что за входным параметром DynamicArray(long s = 10): size(s), count(0)? #5
http://en.cppreference.com/w/cpp/lan...itializer_list
evil0o
5 / 5 / 0
Регистрация: 04.07.2010
Сообщений: 200
03.02.2013, 02:39  [ТС]     Что за входным параметром DynamicArray(long s = 10): size(s), count(0)? #6
нашел я пару статеек. это вообще часто используется? такое ощущение что это способ создания проблем.

Добавлено через 7 минут
http://habrahabr.ru/post/58818/ неплохая
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
03.02.2013, 02:44     Что за входным параметром DynamicArray(long s = 10): size(s), count(0)? #7
evil0o, настолько часто, что некоторые IDE (одна известная, так точно) кидает варнинг, если этот список инициализации не использовать для члена класса.
Единственная возможность использовать ссылки и const члены, позволяет сразу вызвать присваивание, а не предварительное конструирование с параметрами по-умолчанию.
evil0o
5 / 5 / 0
Регистрация: 04.07.2010
Сообщений: 200
06.02.2013, 02:45  [ТС]     Что за входным параметром DynamicArray(long s = 10): size(s), count(0)? #8
появился вопрос.
Инициализаторы конструктора можно использовать:
для полей, являющихся объектами класса, в котором есть один или более
конструкторов, но отсутствует конструктор по умолчанию;
для констант;
для ссылок;

То есть нельзя про инициализировать переменную с помощи функции
C++
1
2
3
4
public: void NumberOfLevels(AnsiString);
AnsiString AllLevels;
ReadMapFile::ReadMapFile(AnsiString FileName):NumberOfLevels( FileName),/*ну или*/NumberOfLevels( AllLevels)
{};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.02.2013, 03:30     Что за входным параметром DynamicArray(long s = 10): size(s), count(0)?
Еще ссылки по теме:

Заполнить квадратную матрицу змейкой по диагонали, начиная с элемента matrix[size-1][size-1] C++
Максимальная и минимальная цифра числа long long int C++
String.count(a[i]) Не могу понять что значит C++

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

Или воспользуйтесь поиском по форуму:
abit
 Аватар для abit
260 / 259 / 33
Регистрация: 03.02.2013
Сообщений: 709
06.02.2013, 03:30     Что за входным параметром DynamicArray(long s = 10): size(s), count(0)? #9
Цитата Сообщение от evil0o Посмотреть сообщение
появился вопрос.
Инициализаторы конструктора можно использовать:
для полей, являющихся объектами класса, в котором есть один или более
конструкторов, но отсутствует конструктор по умолчанию;
для констант;
для ссылок;

То есть нельзя про инициализировать переменную с помощи функции
C++
1
2
3
4
public: void NumberOfLevels(AnsiString);
AnsiString AllLevels;
ReadMapFile::ReadMapFile(AnsiString FileName):NumberOfLevels( FileName),/*ну или*/NumberOfLevels( AllLevels)
{};
насколько мне не изменяет память для подобных вещей есть поле {} в конструкторе, которое находится строчкой ниже в вашем примере, туда суйте свои функции, но естестно они должны работать с классом (инициализировать его внутренние переменные)

конструкторы инициализации просто вызывают соответствующие конструкторы для объектов size(s), count(0) в вашем коде просто вызовет неявным образом следующие конструкторы для объектов size и count при вызове этого:

long size = s;
long count = 0;

отмечу операции присвоение здесь нет, только инициализация, т.е. этот код полностью эквивалентен

long size(s),count(0);
Yandex
Объявления
06.02.2013, 03:30     Что за входным параметром DynamicArray(long s = 10): size(s), count(0)?
Ответ Создать тему
Опции темы

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