На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Классы
    Помогите пожалуйста сделать задание. Знаю что, может быть, оно не сложное, и я с удовольствием разобрался бы сам, но совершенно нет времени.
    Вот задание:
    Дополните класс X таким образом, чтобы приведенный ниже фрагмент работал корректно.
    Если какие-либо некорректности никаким образом исправить нельзя - отметить:
    ExpandedWrap disabled
          class X{
              int m_ar[5];
          ...
          };
          void main()
          {
              int ar[] = {1,2,3,4,5,6,7,8,9,10};
              X x(ar, sizeof(ar)/sizeof(int));//элементы массива m_ar должны
              //стать копиями соответствующих элементов массива ar
              X x1;
              X x2();
              int* p = new int[3];
              //формируются значения элементов...
              X x4(p,3);
          }


    Windows XP, VS2003
      ExpandedWrap disabled
        class X{
                int m_ar[5];
                X()
                {
                   memset( m_ar, 0, sizeof( m_ar ) );
                }
         
                X( int* input, int n )
                {          
                    for( int i = 0; i < n && i < 5 ; i++ ) {
                       m_ar[i] = input[i];
                    }
                }
            ...
            };


      продолжение следует

      Добавлено
      ..чего то не хватает, не могу понять - чего... спать уже пора
        Спасибо
          Надобы
          ExpandedWrap disabled
            class X{
                    int m_ar[5];
            public:
            ...

          не хватет еще освобождения памяти из-под p, но, боюсь, дополнением класса X это не исправить.
            ну да, не исправить.
            На самом деле можно было бы в деструкторе удалять m_ar, но это было бы чревато - мы бы отгребли при попытке удалить стековый массив :whistle:
            (конечно, можно это как то разрулить на уровне ОС или CRT, но 1) это нестандарт, 2) это не С++ :)
              Цитата BugHunter @
              ну да, не исправить.

              ExpandedWrap disabled
                delete [] input;
              :)
              либо

              Цитата -ra- @
              Если какие-либо некорректности никаким образом исправить нельзя - отметить:
              1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0227 ]   [ 15 queries used ]   [ Generated: 21.05.24, 13:02 GMT ]