Классы. Динамически создаваемый одномерный массив c помощью методов класса

Думается мне, что эта тема может быть интересна новичкам, которые безума от сочетания букв ООП.

Я описывал похожую тему

Там я не использовал классы. Но вот подумалось, что неплохо будет продемонстрировать читателю, что такая задача вполне легко решается и с помощью создаваемых программистом методов класса. Разумеется читатель может сказать, что и без меня знает как это делается, но я уверен, некоторым это точно полезно и этим некоторым нужна хотя бы маленькая демонстрация для лучшего понимания работы с классами. Да и потом, среди тех, кто в себе слишком уверен, может быть много таких, кто не заботится об утечках памяти и не особо вникает как правильно удалять выделенную руками память. На этом я заканчиваю свое бесполезное лирическое отступление и привожу исходный код Динамически создаваемого одномерного массива c помощью методов класса

Visual Studio Express 2012

Я не стал особо выпендриваться и поэтому выбрал простой одномерный массив и только стандартные методы для работы с ним. Если вы изучаете C++ и наткнулись на этот материал, то я искренне буду надеяться, что он оказался полезным, помог что-то понять и помог узнать новое.

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

8 комментариев: Классы. Динамически создаваемый одномерный массив c помощью методов класса

  • Максим говорит:

    и зачем тут нужен класс?
    в каком месте тут парадигма ооп?

    парадигма ооп была бы если бы ptr сидел внутри класса, и автоматически чистился деструктором.
    а вы написали 4 библиотечные функции для работы с массивом, но завернули их в класс.
    с тем же успехом только более полезно (в силу лёгкой переносимости в чистый си) можно было написать 4 функции
    Massiv_Create(Ptr,N); Massiv_Fill(Ptr,N); Massiv_Show(Ptr,N); Massiv_Delete(Ptr);

    Автор сайта отвечает:
    Затем, что это для начинающих, а не умеющих.
    умеем использовать классы? – замечательно, хотим делаем так, хотим делаем функциями. На вкус и цвет фломастеры разные.
    не умеем использовать классы? – смотрим и учимся. ("учимся" – это не лично вам, Максим, а в общем)

    вы предполагали раскрыть парадигму ооп. ваш пример наоборот противоречит концепции ооп.

    Автор сайта отвечает:
    я никогда и нигде не писал про то, что я раскрываю парадигму ООП. моя цель была показать примитивные возможности класса и показать, что классы возможно использовать как обычные функции. Выбор пал на динамически создаваемый массив.

    цтата: некоторым нужна хотя бы маленькая демонстрация для лучшего понимания парадигмы ООП и работы с классами.

    Автор сайта отвечает:
    концепцию ООП извратил не я, а десятки тысяч программистов. Некоторые профессионалы готовы голову друг друг оторвать из-за разных мировоззрений. Это как в религии.
    Объясняю достаточно коротко.
    Чтобы начать врубаться в ООП надо научится понимать классы хотя бы немного
    Чтобы научится понимать классы, надо научится понимать элементарные приемы работы
    Если научится понимать элементарные приемы работы с классам — будет приходить понимание работы с классами
    Если будет приходить понимание работы с классами — будет приходить понимание парадигмы ООП.
    Вывод — маленькая демонстрация работы с классами поможет в понимании парадигмы ООП.
    маленькая демонстрация работы с классами на сайте не отменяет ничего, что используется в ООП.

    чтобы понимать в агрохозяйстве нужно уметь грузить навоз. потому сегодня мы залезаем в кучу говна и сидим внутри осознавая себя начинающими агрономами.
    классы относятся к концепции ооп не более чем процедуры к струкруно и процедурно-ориентированному программированию, и чем хуже вы продумываете структуру программы и вынесение подзадач в процедуры, тем больше сбиваете начинающих. также и с ооп не понимая концепции объектного подхода вы и начинающим вбиваете в голову бредни что ооп это написание классов.

    Автор сайта отвечает:
    думайте как хотите. без классов нет ооп, следовательно нет и концепции ооп. Можно, конечно имитировать, но имитация по сути не будет ооп.
    если бы попросили сделать поправку, я бы сделал без лишних слов, но вы давно забыли, что начинающие не сразу разделяют разделение программы на отдельные функции и пихают всё в main, что совершенно не мешает им понимать концепции процедурного и функционального программирования, что не мешает им понимать преимущества процедурного и функционального программирования. Просто является первой ступенькой на пути к знакомству с функциональным программированием. Да вы и сами были таким 100%.
    Вы даже не думаете о том, что чтобы понять преимущества нужно понять недостатки. Вместо этого вы предпочитаете поливать всё вокруг грязью, типа надо сразу всё. Чтобы понимать в агрохозяйстве — нужно понимать зачем нужен навоз и какова его польза. Если вы городской и никогда не возделывали грядки вы никогда не поймете таких вещей. Хотя вы едите фрукты и овощи, выращенные на навозе.
    ======================
    Настоящий и дальнейший разговор на эту тему для меня не имеет смысла.
     
    То что здесь написано: «поможет» обозначает лишь то, что это поможет., а не то, что в этом всё сказано.
    Вам то никак не поможет, а некоторым поможет.

     
    И еще это следущая тема за первым знакомством. Многие читатели не могут воспринять сложное сразу. Для тех кто только проникся в общее понятие класса понять конструкторы, деструкторы и методы доступа сразу же в следующей теме бывает достаточно затруднительно. Вы скорее всего не учли порядок темы.

    я учёл, если бы вы написали просто как работать с классами — нет проблем, но вы извратили концепцию ооп, а переучиваться как известно значительно сложнее чем учиться, начитаются будующие быдлокодены и начинают что ни попадя в классы совать и говорить что это они концептуально ориентированные программисты.

    Автор сайта отвечает:
    Никто из реально крутых ученых не дал одного единственного и единственно верного определения парадигмы программирования.
    Зато вы дали.
    Что я могу сказать?: – Браво.

    единственно верного и определения что такое человек нет, тем не менее все (минимально вменяемые) понимают, что человек это не свинья.
    никакой объектноориентированности в программировании, в самом факте написании классов — нет, объектноориентированность это подход к проектированию программы, разработка методов в соответствии с принципами ооп, т.е. абстракция и инкапсуляция.
    да, в случае си++ классы это механизм позволяющий использовать ооп, но неправильно спроектированный класс(как у вас) это просто программирование классов, а не концепция ооп.

    главное свойство ооп это инкапсуляция, то что в вашем классе как-раз и выброшено, и тем самым вы вводите новичков в тоже заблуждение в котором пребываете сами. ооп это не написание классов, это проектирование классов и последующая реализация, умение реализовывать это ещё не ооп.
    всё что вам нужно исправить — это упоминание того что тут каким-то боком применена парадигма ооп.

    впрочем если вы готовы рассказать какими принципами ооп вы пользовались при написанни этой программы и где они выражены мне будет очень интересно это почитать.

    Автор сайта отвечает:
    если я запишу в private то, что там должно находится, новички не поймут. Им бедолагам не так легко понять термины ООП, а уж что они (термины) делают и почему их используют в тем более сложно сходу.
    я уже сказал, что это вторая тема за первым знакомством с классами.
    и я уже сказал — для меня этот диалог не имеет смысла. Можно было просто подсказать или попросить. Но вы предпочли пополивать меня грязью.(какой негодяй я, специально учу всех быдлокодить, разрушаю правильное понимание бедных читателей)
    я знаю, что здесь об ооп говорить достаточно трудно, ибо его почти нет. на 99,9 % нет.
    это не тема об ООП и не тема о парадигмах, название прочитайте.
    и несмотря на это, я не сомневаюсь, что несмотря на то, что это не относится к общепринятым парадигмам ООП, все это никак не мешает и даже способствует началам понимания.
    ==============================================
    (31.01.14)
    Тем, кто осилил и прочитал наш с Максимом диалог, кому интересно в чем же правда (нормально ли было применить фразу, что эта тема поможет в понимании концепции ООП (фраза, которую я убрал, но которая породила наш с ним диалог)) посвящаю этот комментарий.
    Я сейчас (в минуты написания комментария) читаю учебник Прата С. и выдергиваю оттуда фразу: «Изучение структур приблизит вас к сердцу ООП на языке С++». (Лекции и упражнения 5изд. глава 4. Введение в структуры).
    я немного иронизирую, но если бы Максим увидел, наверное, научил бы замечательного автора учебной литературы Прату С. правильно книги писать.




    0



    0
  • mnxoid говорит:

    P=NULL; //следуя правилам хорошего тона инициализируем его как пустой
    Я один здесь вижу утечку памяти? Вы выделяете память на int и обнуляете указатель, тем самым теряете доступ к участку памяти, выделенном при помощи new.
    Может вы имели ввиду *P=NULL ❓




    0



    0
  • Михаил говорит:

    А зачем вы выделяете массиву из N элементов память N раз в этой строке?
    for (int i=0;i<N;i++) Arr=new int[N];

    Автор сайта отвечает:
    В C++ такой способ единственный способ создать массив из неизвестного заранее количества элементов. Чтобы с клавиатуры вводить число элементов можно было.
    Некоторые компиляторы позволяют задавать число элементов (например, считыванием такого числа с клавиатуры) и потом уже создавать массив, но эту такую штуку лучше не использовать. Пример

    Иногда компилируется и работает, но это неправильно. Мало где работает. (кое кто и руки поотрывать готов если увидит)

     
    Для каждой ячейки массива в индивидуальном порядке резервируется кусочек памяти. Подпортить массив теперь ничто не должно, разве что только программа собственная его.




    0



    0
    • pooh говорит:


      интересно , а что в выражение
      new int[N] выделяет
      одно целое значение и помещает туда значение N ?

      По мне так оператор:
      for (int i=0;i<N;i++) Arr=new int[N];
      явный бред, for можно опустить и оставть только
      Arr = new int[N]
      это будет означать что надо выделить N мест под хранение int
      и поместить адрес этого места в Arr
      Михаил прав !

      Автор сайта отвечает:
      Верно, я тогда и не понял о чем он пишет. Бывает..




      0



      0
  • Nik говорит:

    я все таки не могу понять, чем *&Arr отличается от []Arr. при чем тут вообще «*», «&», да еще и сразу?




    0



    0
    • admin говорит:

      []Arr == *Arr
      *Arr — создает локальную копию указателя на начало массива. Маленькая такая совсем, но все-таки дополнительная переменная, которая создается внутри функции локально и уничтожается внутри функции при выходе из нее.
      *&Arr — не создает локальную копию указателя на начало массива. Это ссылка на указатель. Работает по принципу "Функция, принимающая параметры по ссылке", т.е. напрямую с основным указателем на начало массива.
      Эффект должен стать заметен при большом количестве вызова функции.(не смотрел, но по идее так).




      0



      0
  • Аноним говорит:

    Что-то я совсе ничего не понял. Прошлый урок был понятен, а этот сразу начался с каких-то Arr. Хоть бы объяснили что это. Впервые вижу такой синтакстис




    0



    0
  • Дмитро говорит:

    Автору сайту — велике спасибі. Тема дійсно для початківців, і цей приклад у своєму роді відмінний.
    Так він не ідеальний але це приклад і привід знайти помилки і самому написати краще. Всім хто критикують прохання самим писати приклади.




    0



    0

Добавить комментарий

Ваш e-mail не будет опубликован.

Поиск

 
     

Случайная книга в электронном формате

Яндекс.Метрика
НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Демотиватор вероисповедание программист

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок