Вопросы по С/С++ (СИ)
Начал изучать C++
Добра всем.
Приступил к изучению C++. Появились коекакие размышления. Первое с чем столкнулся при создании проекта - Reduced C, Reduced C++. Покачто не понял в чем там дело и чем конкретно отличается от Standart. Оставил на потом.
Познакомился с понятием классов, объектов, методов. Посмотрел как это лежит в памяти. Разобрался с наследованием классов. Прикольная штука особенно protected. Это то чего не хватало в С.
Что не понравилось - чтобы вызвать функцию из класса нужно сначала создать объект. Возможно есть какието другие способы. Слышал про шаблоны функций но пока до них не дошел. Возможно там есть ответы на мои вопросы.
Про конструкторы понятно. А вот что с деструкторами, когда они вызываются и что в них нужно писать применительно к микроконтроллерам это пока не понятно. Создал класс и объект - конструктор вызывается, а вызова деструктора не видно. Еще надо разобраться с множественными наследованиями ибо это архиважная вещь.
Перегрузка функций прикольная штука но пока не понятно насколько она реально востребована, ведь приходится в голове держать то что имя одинаковое но список параметров разный.
Пока еще не пробовал чето конкретное делать. Только на отвлеченных примерах типа a+b, x+y. Потому еще не очень понимаю как это все будет на практике ложиться. Там в списке глав еще много пунктов есть я так смотрю. Но все по порядку.
Приступил к изучению C++. Появились коекакие размышления. Первое с чем столкнулся при создании проекта - Reduced C, Reduced C++. Покачто не понял в чем там дело и чем конкретно отличается от Standart. Оставил на потом.
Познакомился с понятием классов, объектов, методов. Посмотрел как это лежит в памяти. Разобрался с наследованием классов. Прикольная штука особенно protected. Это то чего не хватало в С.
Что не понравилось - чтобы вызвать функцию из класса нужно сначала создать объект. Возможно есть какието другие способы. Слышал про шаблоны функций но пока до них не дошел. Возможно там есть ответы на мои вопросы.
Про конструкторы понятно. А вот что с деструкторами, когда они вызываются и что в них нужно писать применительно к микроконтроллерам это пока не понятно. Создал класс и объект - конструктор вызывается, а вызова деструктора не видно. Еще надо разобраться с множественными наследованиями ибо это архиважная вещь.
Перегрузка функций прикольная штука но пока не понятно насколько она реально востребована, ведь приходится в голове держать то что имя одинаковое но список параметров разный.
Пока еще не пробовал чето конкретное делать. Только на отвлеченных примерах типа a+b, x+y. Потому еще не очень понимаю как это все будет на практике ложиться. Там в списке глав еще много пунктов есть я так смотрю. Но все по порядку.
to be or not to be = -1
- Реклама
- da-nie
- Говорящий с текстолитом
- Сообщения: 1590
- Зарегистрирован: Вс июн 24, 2012 16:07:00
- Откуда: Лен.Обл.
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Создайте статическую функцию в классе и вызывайте её без создания объекта.чтобы вызвать функцию из класса нужно сначала создать объект.
Деструктор вызывается при уничтожении объекта.Создал класс и объект - конструктор вызывается, а вызова деструктора не видно.
Вообще лучше не используйте. Это антипаттерн в большинстве случаев. Но что такое виртуальное наследование посмотрите.Еще надо разобраться с множественными наследованиями ибо это архиважная вещь.
Это используйте по-минимуму. Лучше аггрегация, чем наследование.Разобрался с наследованием классов. Прикольная штука особенно protected. Это то чего не хватало в С.
Используется для своих целей. А так, IDE должна подсказывать варианты. Не подсказывает? Плохая IDE.Перегрузка функций прикольная штука но пока не понятно насколько она реально востребована, ведь приходится в голове держать то что имя одинаковое но список параметров разный.
stl посмотрите.Там в списке глав еще много пунктов есть я так смотрю. Но все по порядку.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Re: Вопросы по С/С++ (СИ)
Благодарю за ответы.
Про статическую функцию - попробовал, самое то. Хорошо. Но конструктор при этом уже не вызывается. Логично - нет объекта нет и конструктора.
Про деструктор - это понятно, что он вызывается при удалении объекта. Но вот как удалить объект и что писать в деструкторе - освобождение памяти? - это пока не понятно. Возможно это в операционных системах востребовано. А пока что если объект создан, его фиг удалишь из памяти. Разве при динамическом выделении памяти как в С через malloc. Возможно я еще просто не дошел до таких тонкостей.
До virtual только что добрался в прочтении. Однако как я понял, это несколько иное. Множественное наследование обеспечивает иерархию подключений. В virtual пока еще только вникаю, пробую пробовать на примерах. Агрегация? Пока еще не знаю что это такое. Я еще мыслю масштабами Си.
я даже не успеваю еще подумать а она уже подсказывает.
В общем сейчас нахожусь как раз на стадии чтения и пробования.
Про статическую функцию - попробовал, самое то. Хорошо. Но конструктор при этом уже не вызывается. Логично - нет объекта нет и конструктора.
Про деструктор - это понятно, что он вызывается при удалении объекта. Но вот как удалить объект и что писать в деструкторе - освобождение памяти? - это пока не понятно. Возможно это в операционных системах востребовано. А пока что если объект создан, его фиг удалишь из памяти. Разве при динамическом выделении памяти как в С через malloc. Возможно я еще просто не дошел до таких тонкостей.
До virtual только что добрался в прочтении. Однако как я понял, это несколько иное. Множественное наследование обеспечивает иерархию подключений. В virtual пока еще только вникаю, пробую пробовать на примерах. Агрегация? Пока еще не знаю что это такое. Я еще мыслю масштабами Си.
Подсказывает!IDE должна подсказывать варианты. Не подсказывает?
В общем сейчас нахожусь как раз на стадии чтения и пробования.
to be or not to be = -1
Re: Вопросы по С/С++ (СИ)
[uquote="Trully",url="/forum/viewtopic.php?p=3685649#p3685649"]До virtual только что добрался в прочтении.[/uquote]
Что хоть за книга? Если там какой-нибудь С++03, то считай что читаешь описание половины языка
Что хоть за книга? Если там какой-нибудь С++03, то считай что читаешь описание половины языка
Re: Вопросы по С/С++ (СИ)
Читаю вот это http://www.c-cpp.ru/books/dlya-chego-nu ... ye-funkcii и вот это http://cppstudio.com/cat/274/ . Даже если это всего половина языка то мне пока хватит для того чтобы написать свой первый холлоуворлд на С++. Сами ведь знаете, что для того чтобы что то изучить надо вначале вникнуть в основы а потом уже копаться в тонкостях.
to be or not to be = -1
- Реклама
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Самое простое - если объект создан на стеке внутри некоей области видимости (например, внутри фигурных скобок в if() {} или типа того). После выхода из этой области объект уничтожается и вызовется деструктор.Trully писал(а):Но вот как удалить объект
- da-nie
- Говорящий с текстолитом
- Сообщения: 1590
- Зарегистрирован: Вс июн 24, 2012 16:07:00
- Откуда: Лен.Обл.
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Объект удаляется как обычная переменная - при выходе из области видимости (не относится к объектам, созданным в куче, т.е. через new). У вас, видимо, объект глобальный, вот и не удаляется. Создайте его как локальную переменную. В деструкторе вы пишете то, что считаете нужным. Выделяли память? Освобождаете. Открывали файл? Закрываете. Ну и так далее.Но вот как удалить объект и что писать в деструкторе - освобождение памяти?
Никогда не создавайте объекты иначе, чем через new. И не удаляйте иначе, чем через delete. С квадратными скобками delete[](имя массива объектов), если выделяли массив объектов - это важно. Иначе получите вызов деструктора только для первого объекта массива. Исключение составляют всякие умные указатели - они сами удалят объект или массив. Но это уже stl.Разве при динамическом выделении памяти как в С через malloc.
При наследовании через virtual в класс добавляется не сам класс, от которого унаследовано, а ссылка на него. Таким образом, при множественном ромбовидном наследовании у вас не окажется у каждого класса, от которых вы унаследовались свой экземпляр базового класса (суперкласса).В virtual пока еще только вникаю, пробую пробовать на примерах.
Вот тут посмотрите.Агрегация? Пока еще не знаю что это такое.
И очень важно: обязательно посмотрите на полиморфизм и концепцию интерфейсов. Это крайне важная вещь. Не наследование (исключая наследование от интерфейса), а полиморфизм вам пригодится больше всего.
И день и ночь в пути...
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Мои программки: https://github.com/da-nie
Мои публикации: https://habr.com/ru/users/da-nie/posts/
Мои видео: https://www.youtube.com/channel/UCUroi3 ... 52g/videos
Re: Вопросы по С/С++ (СИ)
Угу, пошел читать. Похоже что С++ идеологически сложнее Си.
Про видимость переменной объекта - я создавал их все в main без вложенностей. Пробовал и глобальный объект тоже. Теперь понятно почему не получалось с деструктором. А про то как работает стек это я хорошо знаю еще с чистого Си, с этим проблем нет.
Про видимость переменной объекта - я создавал их все в main без вложенностей. Пробовал и глобальный объект тоже. Теперь понятно почему не получалось с деструктором. А про то как работает стек это я хорошо знаю еще с чистого Си, с этим проблем нет.
to be or not to be = -1
Re: Вопросы по С/С++ (СИ)
Вообще-то С++ относительно микроконтроллеров - это ардуино IDE...
Хотя там для начала весьма мало о том оговорено...
Приходится самому мозги ломать...
https://radiokot.ru/forum/viewtopic.php ... 4#p3680734
МНДЯАА...

Хотя там для начала весьма мало о том оговорено...
Приходится самому мозги ломать...
https://radiokot.ru/forum/viewtopic.php ... 4#p3680734
МНДЯАА...
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
BOB51 писал(а):Вообще-то С++ относительно микроконтроллеров - это ардуино IDE...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
В Ардуино не лезу по политическим соображениям уж извините. И кто из рядовых пользователей в Ардуино когда нибудь писал сам классы? Кажись там все только в маин пишут вызовы функций из скетчей и все. Как мне кажется даже разработчики скетчей для Ардуино не утруждаются дальше простого создания базовых классов и методов в нем.
to be or not to be = -1
Re: Вопросы по С/С++ (СИ)
[uquote="Trully",url="/forum/viewtopic.php?p=3685649#p3685649"]Но вот как удалить объект и что писать в деструкторе - освобождение памяти? - это пока не понятно.[/uquote]
Деструктор не освобождает память занятую объектом. Он не для этого. Он только разрушает объект.
Деструктор не освобождает память занятую объектом. Он не для этого. Он только разрушает объект.
Re: Вопросы по С/С++ (СИ)
Trully Гляньте по ссылке.
Я как раз разборкой с теми классами и выносом фрагментов за пределы основного файла *.ino и разбираюсь.
Только вот никито из ГУРУ (за исключением Ser60 да Reflector) в том рассмотрении так и не поучаствовали (в полезном смысле)...
А таки вопрос весьма интересный.
И классы и работа с оными ПОДДЕРЖИВАЕТСЯ (правда за счет чего там - не мне разбираться спецкаталог за 4 гига в скрытых папках).

Я как раз разборкой с теми классами и выносом фрагментов за пределы основного файла *.ino и разбираюсь.
Только вот никито из ГУРУ (за исключением Ser60 да Reflector) в том рассмотрении так и не поучаствовали (в полезном смысле)...
А таки вопрос весьма интересный.
И классы и работа с оными ПОДДЕРЖИВАЕТСЯ (правда за счет чего там - не мне разбираться спецкаталог за 4 гига в скрытых папках).
Re: Вопросы по С/С++ (СИ)
[uquote="da-nie",url="/forum/viewtopic.php?p=3685708#p3685708"]Никогда не создавайте объекты иначе, чем через new. И не удаляйте иначе, чем через delete.[/uquote]
Почему это?
Для embedded я бы наоборот рекомендовал - никогда не создавать объектов через new.
Почему это?
Для embedded я бы наоборот рекомендовал - никогда не создавать объектов через new.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
[uquote="jcxz",url="/forum/viewtopic.php?p=3686044#p3686044"][uquote="Trully",url="/forum/viewtopic.php?p=3685649#p3685649"]Но вот как удалить объект и что писать в деструкторе - освобождение памяти? - это пока не понятно.[/uquote]
Деструктор не освобождает память занятую объектом. Он не для этого. Он только разрушает объект.[/uquote]имхо, вы объяснили так, что ничего не понять.
назначение деструктора - освободить память, которую выделял для своих нужд объект, например, в конструкторе. ну и иногда сделать какие-то дополнительные "предсмертные" действия
Деструктор не освобождает память занятую объектом. Он не для этого. Он только разрушает объект.[/uquote]имхо, вы объяснили так, что ничего не понять.
назначение деструктора - освободить память, которую выделял для своих нужд объект, например, в конструкторе. ну и иногда сделать какие-то дополнительные "предсмертные" действия
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Вопросы по С/С++ (СИ)
[uquote="ARV",url="/forum/viewtopic.php?p=3686049#p3686049"]назначение деструктора - освободить память, которую выделял для своих нужд объект, например, в конструкторе. ну и иногда сделать какие-то дополнительные "предсмертные" действия[/uquote]
Не обязательно память. Что угодно может освобождать и что угодно другое делать. Вот только память, занятую самим объектом, он не освобождает. О чём я и написал.
Эта память освобождается после завершения работы деструктора, отдельно. Или вообще не освобождается.
Не обязательно память. Что угодно может освобождать и что угодно другое делать. Вот только память, занятую самим объектом, он не освобождает. О чём я и написал.
Эта память освобождается после завершения работы деструктора, отдельно. Или вообще не освобождается.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
ну я не знаю, что еще в программировании, кроме памяти, можно освобождать 
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Вопросы по С/С++ (СИ)
jcxz, Для МК с ограниченным объемом памяти я предпочитаю C, а не C++. Потому как C++ без STL большого смысла не имеет, а с STL - в такие МК все равно не лезет.
По теме. Деструктор освобождает ресурсы, которые были тем или иным образом захвачены при инициализации объекта и при вызове его методов. В частном случе, особенно на МК без ОС - это дополнительно выделенная память. В случае RTOS - это могут быть, например, семафоры или очереди.
По теме. Деструктор освобождает ресурсы, которые были тем или иным образом захвачены при инициализации объекта и при вызове его методов. В частном случе, особенно на МК без ОС - это дополнительно выделенная память. В случае RTOS - это могут быть, например, семафоры или очереди.
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18546
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
можно подумать, что семафоры или очереди - не памятьПростоНуб писал(а):В случае RTOS - это могут быть, например, семафоры или очереди.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- ПростоНуб
- Собутыльник Кота
- Сообщения: 2723
- Зарегистрирован: Пт сен 07, 2018 20:20:02
- Откуда: деревня в Тульской губернии
Re: Вопросы по С/С++ (СИ)
ARV, Если объект захватил ранее созданный кем-то семафор, то деструктор объекта должен только освободить семафор, но вовсе не удалять его.


