Уроки C++ с нуля / Урок #18 - (Введение в ООП) Классы и объекты

Поділитися
Вставка
  • Опубліковано 7 сер 2016
  • ООП в языке C++ является его отличительной чертой от языка Си. В этом уроке мы изучим классы и объекты в языке C++, а также научимся взаимодействовать с полями (переменными) благодаря методам и функциям (аксессоры).
    ✔ Основной сайт: itproger.com/
    ✔ -------------
    Вступай в группу Вк - prog_life
    Группа FaceBook - goo.gl/XW0aaP
    Instagram: / gosha_dudar
    Telegram: t.me/itProger_official
    Страничка Twitter - / goshadudar
    - Уроки от #GoshaDudar 👨🏼‍💻
    - Все уроки по хештегу #GoshaCpp

КОМЕНТАРІ • 147

  • @monolag4319
    @monolag4319 7 років тому +325

    "И копировали бы весь код для новой вкладки. То есть это х... Это плохо! "

    • @alexbohak4628
      @alexbohak4628 7 років тому +25

      проорал на этом моменте

    • @user-ds8he4in5z
      @user-ds8he4in5z 6 років тому +9

      пеесматривал еще раз на этом моменте)

    • @leowarrero3174
      @leowarrero3174 6 років тому +7

      2:05

    • @NFOR
      @NFOR 6 років тому +6

      так можно было бы создать бесконечный цикл while

    • @user-hm6oh2jw4y
      @user-hm6oh2jw4y 6 років тому +5

      И копировали бы весь код для новой вкладки.
      Но это же полный бред!!!
      У нас просто была бы функция, создающая новую вкладку

  • @user-fh8gb4ce1z
    @user-fh8gb4ce1z 6 років тому +6

    Спасибо тебе, Гоша. Очень полезные и продуктивные уроки. Осваивается язык с твоей помощью очень легко

  • @user-vi6id1bx2m
    @user-vi6id1bx2m 6 років тому +38

    Можно сделать еще интереснее, чтобы не в коде прописывать 3 параметра для объекта, а в консоли.
    Т.е создать функцию чтобы записывать данные в переменные:
    void input() {
    cin >> year;
    cin >> month;
    cin >> day;
    }
    А внизу вместо shkoda.set(параметры); прописать shkoda.input();

  • @ifomich
    @ifomich 7 років тому +33

    Давным давно, помнится, я брал игры от телефонов, декомпилировал их, переводил на русский и собирал обратно в .jar файл. Языка java я не знал и мне всё было интересно, чёйта там за классы в каждом файле. И вот спустя 13 лет я таки понял, что это за классы такие))
    Но автор молодца! Объясняет так, что даже я понимаю))

    • @sipspice
      @sipspice 7 років тому

      Сергей Фомичев Жиза

    • @davidkroods811
      @davidkroods811 6 років тому +1

      какой декампилятор ты использовал ?

    • @darkmatter9520
      @darkmatter9520 5 років тому

      Хах я тоже с похожего начинал декомпилировал плагины для серверов Minecraft и русифицировал

  • @user-pk7dq6nh3s
    @user-pk7dq6nh3s 7 років тому +80

    02:10 чуть не матюкнулся))

  • @user-sq2ei5ti3m
    @user-sq2ei5ti3m 2 роки тому

    Это гениально!Спасибо вам)

  • @Patallogus666
    @Patallogus666 7 років тому +15

    Обалденные уроки и шикарная подача! От остальных авторов я засыпал реально)))))))))

  • @dmitryefimkin6550
    @dmitryefimkin6550 7 місяців тому

    Спасибо. Понятное и интересное объяснение.

  • @user-zi4cy1iq6d
    @user-zi4cy1iq6d 3 роки тому

    👍👍👍💪👏👏👏 Спасибо! Создал свой клас с использованием Кирилицы .

  • @barrera6669
    @barrera6669 3 роки тому

    Только что глянул, помог с темой) В вузе не мог выучить нифига, завтра экз. Луцек ставлю)

  • @NoName-xh9nb
    @NoName-xh9nb 8 років тому +21

    Здравствуй а когда ты будешь говорить про создание GUI и будешь ли вообще про него говорить?
    Спасибо!

  • @user-ru4bk7qe3s
    @user-ru4bk7qe3s 4 роки тому

    Спасибо!

  • @pokayfu2343
    @pokayfu2343 5 років тому

    хорошее видео , молодец.

  • @dangan9932
    @dangan9932 7 років тому +37

    Это ху, это плохо)))

  • @tree-service
    @tree-service 7 років тому

    как правильно вынести данный класс "авто" в другой файл и подключить его к этому проекту?

  • @FastTest-comment-support
    @FastTest-comment-support 2 роки тому +2

    У автора 100% Шкода :)

  • @lianbice7422
    @lianbice7422 3 роки тому

    удобненько и воды немного спасибо

  • @don1234569
    @don1234569 6 років тому +1

    будут ли уроки по c++ || c# для профф?

  • @dashapro8628
    @dashapro8628 2 роки тому

    Прикольно, что я смотрю это видео 23 ноября)))

  • @elyutin5283
    @elyutin5283 7 років тому +2

    Поправьте если что-то не так,но разве public,private,protected это не спецификаторы доступа?

  • @silvanya2444
    @silvanya2444 6 років тому

    А если я захочу поменять параметр shkoda, например год, как это сделать?

  • @user-vw8ho5iy4t
    @user-vw8ho5iy4t 5 років тому

    Хорошо комментируешь (2:09 - Это х..... Это плохо...)

  • @takatai6668
    @takatai6668 5 років тому

    Гоша, посоветуй. Как лучше запомнить ООП. Я вроде понял. Но запомнить, трудновато.

  • @oldzhas777
    @oldzhas777 4 роки тому

    Скажи пожалуйста, а что за компилятор это у тебя?

  • @MemsFN
    @MemsFN Рік тому +1

    2:08 хотел сказать, что - то, но передумал😉

  • @piha1298
    @piha1298 5 років тому +9

    Ну когда же шкода будет записываться правильно: "Skoda" без h =D

  • @user-dy4qp2ey5m
    @user-dy4qp2ey5m 5 років тому

    Очень хороший урок, объясняешь просто отлично, спасибо большое. Подскажи, пожалуйста, только как называется программа(компилятор), который показан на видео

    • @akashino376
      @akashino376 5 років тому

      даша ириньева , на mac -Xcode на Windows - visual studio или code block(на крайняк)

  • @NFOR
    @NFOR 6 років тому

    а почему бы не получать доступ через наследование . class a :: public auto

  • @user-sd8dh5df9f
    @user-sd8dh5df9f 6 років тому

    Почему первая програма не работает VS2017?

  • @perpetualgod5038
    @perpetualgod5038 6 років тому +1

    Понимаю, что не очень актуальная, но немного полезная информация для автора: "is" и "-" - одно и то же. Например, "месяц - 11" переводится как "(the) month is 11"

  • @StoryOff
    @StoryOff 7 років тому

    Такое получилось. Сначала просто так сделал, потом захотелось со вводом. Но со вводом как-то громоздко если в мейне его делать, поэтому перенес его в функцию класса.
    class House
    {
    private:
    int floor_amount, age, room_amount;
    string name;
    public:
    void set(string name_house, int floor_house, int room_house, int age_house)
    {
    cout name_house;
    cout floor_house;
    cout room_house;
    cout age_house;
    name = name_house;
    floor_amount = floor_house;
    room_amount = room_house;
    age = age_house;
    }
    void get()
    {
    cout

  • @user-wq2sy6tk7m
    @user-wq2sy6tk7m 5 років тому

    Помогите, пожалуйста!!!
    Я написала класс,как вы и говорили и показывали, но подчеркивает cin, cout и пишет "cin does not name a type" так же и для cout .

    • @eyyubmuradov9308
      @eyyubmuradov9308 4 роки тому

      пропиши using namespace std; в начале программы еще до всех функций и классов....

  • @vooslich
    @vooslich 2 роки тому +1

    " 1:50 -- то мы бы просто копировали весь код ради одной вкладки. Это х... это плохо.."

  • @maxvulf885
    @maxvulf885 2 роки тому

    а если я еще хочу что бы у меня писался цвет типо "orange",как это сделать?

  • @mbpddd
    @mbpddd Рік тому +1

    Как выделять и сразу коментировать на вижуал студио

  • @face863
    @face863 4 роки тому +3

    А зачем создавать 2 функции в классе,если можно было этот cout написать в функции set?

  • @GoodChoiseBitch
    @GoodChoiseBitch 7 років тому +1

    а как сделать так, чтобы вместо "...of this auto... "выводилось "of bmw... или ...of schoda..."и т.д. на основе функции, чтобы не прописывать cout для каждой машины?

    • @Arifnasirov
      @Arifnasirov 7 років тому +1

      интересно если бы можно было не вписывать самому каждый раз имя объекта (shkoda)
      например в Python было: print("хххх {0} ххх".format(a))
      то-есть вместо "а" вписывалось его значение.
      Есть ли альтернатива этому в C++ ?????

    • @user-uz1kt1iq3v
      @user-uz1kt1iq3v 7 років тому +1

      char* Name

    • @universegames7692
      @universegames7692 3 роки тому

      Ты просто создаёшь ещё одну переменную как название машины и выводишь ее. Ты долго ждал меня и я пришёл

    • @maxvulf885
      @maxvulf885 2 роки тому

      @@universegames7692 можно пример пожалуйста

    • @universegames7692
      @universegames7692 2 роки тому

      @@maxvulf885 Ты слишком поздно пришёл. Я уже забыл этот язык. Программирование оказалось для меня бесполезным.

  • @roflanebalo4456
    @roflanebalo4456 6 років тому +7

    2:09 копировать весь код это ху...плохо для программы)

  • @Danoherqoyan
    @Danoherqoyan 6 років тому +3

    Спасибо большое за твои старания...
    #include
    using namespace std;
    class Home{
    private:
    int floor, room, price;
    public:
    void set(int hm_floor, int hm_room, int hm_price){
    floor = hm_floor;
    room = hm_room;
    price = hm_price;
    }
    void get() {
    cout

  • @user-je2cd6uw9g
    @user-je2cd6uw9g 5 років тому

    Кто-нибудь может сказать в чем отличие структуры от классов??

  • @oksid9133
    @oksid9133 7 років тому +12

    ООП и 2я машина появилась!)

    • @Slavasil
      @Slavasil 6 років тому

      хахахах

  • @user-pn1yd5mr7g
    @user-pn1yd5mr7g 7 років тому +1

    а есть ли в С++ Getter и Setter?

  • @i3doctor474
    @i3doctor474 6 років тому

    Странно у меня почему то ошибку выводит!

  • @stickmanlegends2418
    @stickmanlegends2418 5 місяців тому

    Ввел вроде бы все правильно,но на консоли выводит только class is working. Кто нибудь сталкивался с таким?

  • @vladyslavserdiuk2893
    @vladyslavserdiuk2893 4 роки тому +1

    "это х, это плохо" ©

  • @lemurcatta4249
    @lemurcatta4249 7 років тому +4

    Вот мое скромное Д/З ))
    Хотел создать несколько классов с разными значениями, но после, ничего не хочет работать (не найдена точка входа). Я так понял, что залез дальше, за рамки этого урока.
    Ну а так, вот:
    #include
    using namespace std;
    class Auto {
    private:
    int Количество__ядер, RAM_, Емкость__аккумулятора;
    float Частота__CPU;
    public:
    void message() {
    setlocale(LC_CTYPE, "rus");
    cout

    • @user-nj5pp7ug8g
      @user-nj5pp7ug8g 5 років тому

      Исправил твои ошибки.
      Вот рабочий код:
      #include
      using namespace std;
      class Auto {
      private:
      int Количество__ядер, RAM_, Емкость__аккумулятора;
      float Частота__CPU;
      public:
      void message() {
      setlocale(LC_CTYPE, "rus");
      cout

  • @ori-d
    @ori-d 5 років тому +1

    В чем отличие структуры от класса (естественно в с++)?

    • @milkyshake5902
      @milkyshake5902 2 роки тому

      Как минимум в том,что ты можешь прописывать функции внутри класса(в отличие от структуры),применять наследование

    • @princessmary5556
      @princessmary5556 Рік тому

      @@milkyshake5902 Бред.

    • @princessmary5556
      @princessmary5556 Рік тому

      В с++ вообще нет никаких структур. Пусть название ключевого слова struct не вводит вас в заблуждение. На самом деле оно описывает класс, а не структуру. При использовании ключевого слова struct, модификатор доступа к членам и наследование по умолчанию являются публичными, в то время как при использовании ключевого слова class, модификаторы доступа и наследования являются приватными.

  • @piterripetev9652
    @piterripetev9652 7 років тому

    в начале было все понятно но потом начал совмещать публичный и закрытый клас мозги взорвались

  • @mr.drakkid6936
    @mr.drakkid6936 6 років тому +2

    А про protected: забыл, печально...

  • @andreyua2
    @andreyua2 6 років тому

    А че за IDE кстати?

  • @user-eu9df6kv6i
    @user-eu9df6kv6i 6 років тому

    красИвее ):

  • @user-fn4us1te7n
    @user-fn4us1te7n 7 років тому

    а как слово вывести то ?

    • @user-fn4us1te7n
      @user-fn4us1te7n 7 років тому

      Никита Абраменко ,а имею ввиду как с клавиатуры ввести...

  • @user-zb9cb8kz4q
    @user-zb9cb8kz4q 7 років тому +3

    #include "stdafx.h"
    #include
    #include
    using namespace std;
    class phone {
    private:
    int year, size, yadra;public:
    void message() {
    cout

    • @timohavol8032
      @timohavol8032 6 років тому +4

      Молодец, неплохо, но... (знаю что уже почти год прошёл, скорее всего уже хорошо шаришь, но для остальных интересующихся напишу) Плохо что ты используешь разные отдельные функции get и set для каждого бренда телефона. Таким образом ты не совсем верно использовал главную фишку ООП, показанную автором в этом видео --> суть в том, что имея одну функцию, можно забивать совершенно разные значения под каждый из экземпляров класса. (Знаю что юзал скорее для текста cout, но так, думаю, не стоит делать)

    • @nikolayprudov170
      @nikolayprudov170 2 роки тому

      ​@@timohavol8032 Молодец, неплохо, но... (знаю что уже почти год прошёл, скорее всего уже научился гуглить, но для остальных интересующихся напишу) Плохо что ты используешь слово yadra ведь ты знаешь слова year и size. Таким образом это выглядит максимльно нелепо. (думаю, не стоит так делать)

  • @kagatooo
    @kagatooo 6 років тому +1

    #include
    #include
    using namespace std;
    class houses {
    private:
    int windows ;
    bool pool;
    float square;
    string name;
    public:
    void message() {
    cout

    • @justnikita2830
      @justnikita2830 Рік тому

      Получилось круто, можно еще вместо if(pool == 1) **код** else **код** , сделать так:
      **Код** if(pool == 1) cout

  • @_____2525
    @_____2525 2 роки тому

    2:07 мат хотел сказать

  • @yura_belyavtsev
    @yura_belyavtsev 5 років тому +1

    Можно не создавать метод get, а его содержимое просто написать в set.

  • @ikirutavi
    @ikirutavi 6 років тому

    Объясните, пожалуйста, как выводить строки с помощью классов, а не только тип int

    • @user-vi6id1bx2m
      @user-vi6id1bx2m 6 років тому

      #include
      string название;
      cin >> название;
      cout

    • @ikirutavi
      @ikirutavi 6 років тому

      Ты вообще мой вопрос видел?

  • @agelast222
    @agelast222 6 років тому

    Функции используют классы? Что дальше, ноги используют человека? Может наоборот?

  • @universegames7692
    @universegames7692 3 роки тому

    2:09

    • @GoStrong
      @GoStrong 3 роки тому

      @@AlexanderSemenko это ху... это плохо

    • @princessmary5556
      @princessmary5556 Рік тому

      @@AlexanderSemenko Нет, не весь. Зачем вы балаболите о том, в чем не разбираетесь?

  • @eukalyptusbonb0n
    @eukalyptusbonb0n 3 роки тому

    Я придумал термин «объектно-ориентированный», и я уверяю вас, что не имел в виду C++ ©Алан Кей

    • @princessmary5556
      @princessmary5556 Рік тому

      Начиная с 1984, Кэй был ведущим исследователем (Apple Fellow) в Apple до закрытия группы перспективных технологий (ATG), одного из отделов исследований и разработок. Тогда он присоединился к Walt Disney Imagineering в качестве главного исследователя (Disney Fellow) и оставался там до тех пор, пока Дисней не закрыл свою программу Disney Fellow. Позже Кэй работал в команде Applied Minds, затем стал главным сотрудником (Senior Fellow) в Hewlett-Packard, пока HP не распустил команду перспективных исследований в области программного обеспечения 20 июля 2005 года.
      Теперь понятно, почему Smalltalk не взлетел.

  • @ryne3778
    @ryne3778 3 роки тому

    Одноклассники в деле

  • @maximnor5130
    @maximnor5130 6 років тому

    А я не присваивал Private (значения) другим переменным и у меня всё работает вот код: #include "stdafx.h"
    #include
    #include
    using namespace std;
    class car {
    private:
    string color;
    int wheels;
    public:
    void masseges () {
    cout

  • @user-jw3hr1dy6q
    @user-jw3hr1dy6q 4 роки тому

    #include
    #include
    #include
    #include
    #include
    using namespace std;
    class Tree {
    private:
    int number, number_List;

    public:
    void message() {
    cout

  • @sambadi_8957
    @sambadi_8957 4 роки тому +1

    Моё ДЗ:
    #include
    #include
    using namespace std;
    void menu();
    class Game {
    private:
    int date[3], price, PEGI;
    public:
    char name[20];
    void set() {
    cout > name;
    cout > date[0];
    cout > date[1];
    cout > date[2];
    cout > price;
    cout > PEGI;
    }
    void get() {
    cout

    • @mironstav2-223
      @mironstav2-223 Рік тому

      Спс мне как раз нужен был чей то код где я смогу разобратся

    • @sambadi_8957
      @sambadi_8957 Рік тому

      @@mironstav2-223 жесть ты древность откопал

  • @user-rm8qy1ct8n
    @user-rm8qy1ct8n 4 роки тому

    #include
    #include
    using namespace std;
    class Dom {
    private:
    int wide, length, age;
    string type;
    public:
    void set(int _wide, int _length, int _age, string _type) {
    wide = _wide;
    length = _length;
    age = _age;
    type = _type;
    }
    float perimetr(int wide, int length) {
    return wide + length;
    }
    float square(int wide, int length) {
    return wide * length;
    }
    float price(int age) {
    float res = square(wide, length) / perimetr(wide, length)*pow(age, 2);
    return res;
    }
    void info() {
    cout

  • @user-mi6sx1ef1e
    @user-mi6sx1ef1e Рік тому

    Что такое класс? Что такое объект?

    • @princessmary5556
      @princessmary5556 Рік тому

      Объект - область памяти.
      Класс - тип данных. Определяет содержимое объекта, а так же методы для его обработки.

    • @user-mi6sx1ef1e
      @user-mi6sx1ef1e Рік тому

      @@princessmary5556 В такой формулировке я не вижу разницы с Цэ без плюсплюс. Всё данные и там находятся в какой-то области памяти. Со всеми данными так или иначе и там работают. Ещё раз, я ничего при этом не "пытаюсь"! Я просто не понимаю, зачем слово функции заменили на слово методы, зачем набор данных заменили на слово класс? А в итоге не могу думать в формате С++. Более того, я в своё время занимался и преподавательской деятельностью и из этой работы я вынес стойкое убеждение, что прежде, чем ученику что-то объяснять, нужно выяснить, что у него в голове сложилось не так. Другими словами: "Ты думаешь и уверен в том, что видишь на небе звезды со всей Вселенной, а это не так. Ты видишь звёзды только находящиеся в нашей галактике. Да и то, только небольшую часть из 300 миллиардов оных." Вот как-то так. Кстати, примерно так же я в своё время объяснял понятные мне вещи, но непонятные однокурсникам.

  • @horhegarsia4221
    @horhegarsia4221 10 місяців тому

    шкода правильно пишется без h: skoda

  • @irena4459
    @irena4459 5 років тому

    0

  • @bonjovi8610
    @bonjovi8610 7 років тому

    одно не понятно, для чего нужны классы и структуры

    • @user-zb9cb8kz4q
      @user-zb9cb8kz4q 7 років тому +1

      в классы ты можешь добавлять методы и функции

  • @serveladik
    @serveladik 7 років тому

    А ЗАЧЕМ тогда в прайват пихать данные, если их потом изменять через паблик

    • @Grintekk
      @Grintekk 7 років тому +1

      Это принцип инкапсуляции, почитай в инете на эту тему. Там более подробно описано, чем я смогу тебе обьяснить.

    • @serveladik
      @serveladik 7 років тому

      Константин Галицкий я знаю примерно что это

    • @turboboy8049
      @turboboy8049 7 років тому

      ►Без привата выходит короче. Разумеется, Гоша просто показывает, что так можно, но если оптимизировать именно этот код, то будет так:
      #include
      using namespace std;
      class Auto
      {
      public:
      int year, month, day;
      void message()
      {
      cout

  • @flexoalex4168
    @flexoalex4168 4 роки тому

    Не много не правильно объяснил суть функции set. Попробуй вызвать таким образом, shkoda.set(-32, 35, 'W'); и посмотри что выведется на экран. Чтобы такого не произошло в функции set ВСЕГДА производиться проверка на корректность принимаемых данных. Так как класс закрытый ящик, то ошибочные данные могут убить всю программу.

  • @StasEnso
    @StasEnso 5 років тому

    Парень, похоже, сам не понимает сути ООП, если описывая ООП, он по сути описывал преимущества процедурного программирования. В ООП главная мысль совсем в другом. Идеальный ООП код не содержит глобальных переменных, а все объекты не спутаны между собой нитями взаимосвязей. Любой объект можно заменить и не придётся переписывать под эту замену половину кода как в процедурном программировании.

    • @digitalgame3645
      @digitalgame3645 5 років тому

      Можете скинуть нормальный курс или видео обучение?

    • @user-tf1bl8jo8v
      @user-tf1bl8jo8v 2 роки тому

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

  • @vasilyyy989
    @vasilyyy989 5 років тому

    Паблык. Так раздражает.

  • @user-tq8bw3ej9v
    @user-tq8bw3ej9v 6 років тому

    Моё дз) Знаю поздно но что поделать)
    Если здесь кто-то ещё есть подскажите как улучшить мой этот мини код, может его можно уменьшить?))
    #include
    using namespace std;
    class Auto {
    private:
    int year, month, day;
    public:
    void message () {
    cout

    • @user-rf8dx9us8e
      @user-rf8dx9us8e 6 років тому +1

      В функцию get помести ещо один параметр - название автомобиля.И при вивода на екран виводи не разние функции а одну но с разними значениями етой переменной.Тоесть с разним названием
      P.S.Извините за руский.Я украинец русский знаю плохо а пишу на нем чмсто из уважения к собеседнику.На момент написания коментария 13 лет.

    • @user-tq8bw3ej9v
      @user-tq8bw3ej9v 6 років тому

      Богдан Шилов, спасибо за ответ

    • @mbpddd
      @mbpddd Рік тому

      Привет спустя 5 лет , ты уже стал програмистом ?🙂🙂🙂

    • @user-tq8bw3ej9v
      @user-tq8bw3ej9v Рік тому

      @@mbpdddнет

    • @mbpddd
      @mbpddd Рік тому

      @@user-tq8bw3ej9v печально

  • @jonik_doit4463
    @jonik_doit4463 7 років тому

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

  • @NonenHP
    @NonenHP 7 років тому

    Правильно пишется Škoda

  • @user-gb6ok4vn4k
    @user-gb6ok4vn4k 4 місяці тому

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