Создать абстрактный класс vehicle транспортное средство

Создать абстрактный класс vehicle транспортное средство

Очень часто в базовом классе определяется виртуальная функция, которая не выполняет каких-либо значимых действий. Как я уже упоминал при объяснении понятия объекта, чем ниже находится класс в лестнице иерархии, тем он более конкретен. Т.е. базовый класс обычно не определяет законченный тип. Очень часто получается, что базовый класс не имеет какой-либо практической ценности для его непосредственного применения в программе. Однако он имеет ценность для формирования производных классов. Рассмотрим наш пример. Мы использовали в программе создание объекта класса vehicle только для придания примеру большей наглядности. В реальной же программе(также как и мире) нам вряд ли пригодится объект класса vehicle(транспортное средство). Нас больше интересует конкретная реализация возможностей этого класса, которую нам дают производные из него классы car, truck, boat. Рассматривая работу функции message класса vehicle, мы заметим, что при выполнении нашей программы только один раз (если не принимать в расчет первый вызов процедуры message, когда был определен объект класса vehicle) из трех вызывалась функция message класса vehicle. Если же в класс truck добавить свою функцию message, то реализация функции message в классе vehicle не будет представлять никакой ценности.

Таким образом, мы можем сделать два очень важных на данном этапе вывода:

  1. класс vehicle нам ценен только как базовый класс
  2. функция message класса vehicle стала нужна только для того, чтобы ее переопределили в производных классах.

Чисто виртуальным методом называют такой метод, который не определяется в базовом классе. У него нет тела, а есть только декларация о его существовании.

К примеру, если мы хотим представить класс vehicle в виде абстрактного класса, нам необходимо сделать две вещи: добавить метод message в класс truck и убрать тело функции в базовом классе vehicle. Тогда описание класса vehicle будет выглядеть следующим образом:

Класс, содержащий хотя бы один чистый виртуальный метод, называется абстрактным классом.

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

Абстрактным классом можно назвать класс, специально определенный для обеспечения наследования характеристик порожденными классами.

Создание программ на языках C и C++.

[администратор рассылки: Андрей Кузнецов aka Dr_Andrew (Старший модератор)]

Читайте также:  Файл pkcs 12 с расширением pfx

Лучшие эксперты в этом разделе

Коцюрбенко Алексей Владимирович
Статус: Старший модератор
Рейтинг: 853
CradleA
Статус: Профессор
Рейтинг: 566
solowey
Статус: Специалист
Рейтинг: 397
Перейти к консультации №:

Уважаемые эксперты, помогите пожалуйста разобраться.
У меня такая задача
Создать абстрактный класс CVerhicle. На его основе реализовать классы CPlane, CCar и CShip. Классы должны иметь возможность задавать и получать координаты, параметры средств передвижения (цена, скорость, год выпуска). Для самолета должна быть определена высота, для самолета и корабля — количество пассажиров. Для корабля — порт приписки. Написать программу, создающую список объектов этих классов в динамической памяти. Программа должна содержать меню.
Код к ней в приложении.
Объясните пожалуйста методы которые описаны в виртуальном классе, и зачем там нужна структура из двух полей, не понятна основная программа. Я оставил комментарии в самой задачи где мне не ясно.

Состояние: Консультация закрыта

Здравствуйте, S K A L T .

1. Структура CPoint нужна, чтобы описывать координаты. Они состоят из 2 чисел — широты и долготы, то есть одного числа было бы недостаточно.
2. Инкапсуляция — один из принципов объектно-ориентированного программирования. Его суть в том, что данные, которые хранятся в классе, должны быть заключены в нем как в шкатулке. Для того, чтобы узнать значения данных или изменить их, применяют методы get/set. Например, int GetPrice() — это методы вывода, позволяет узнать внешней программе о значении цены. SetPrice — метод установки цены. В методах класса существует специальный указатель this. Это указатель на член класса. Если класс определяет данные, которые у каждого экземпляра объекта будут индивидуальны, this->priceпозволяет обращаться к цене объекта, а price — это аргумент функции. Функция устанавливает внутреннее значение цены равным аргументу функции.

list zhelezki; здесь создается список объектов. Наверное, можно было бы обойтись простым массивом. list — это и есть список. list ::iterator it; — это итератор — объект, который позволяет путешествовать по списку. Его аналогом для массива был бы индекс i.
Если для перебора массива инкрементируется i, для листа инкрементируется итератор.
for(it=zhelezki.begin();it!=zhelezki.end();it++) это аналог for(i=0;i!=т;i++) , который обычно применяется при переборе массива.
zhelezki.push_back(samoletik); — в список заталкивается очередной объект.
Обратите внимание на . Это лист указателей на CVehicle. Если бы это был список CVehicle, невозможно было бы создать его, так как CVehicle — абстрактный класс.
(*it)->move();
*it позволяет получить по итератору объект, который хранится в листе. Он имеет тип указатель на CVehicle. Однако в листе конкретные объекты разных типов. Для всех типов виртуальный метод move переопределен. Поэтому при работе программа печатает
© Цитата:
The car moves. The ship moves. The plane moves.

Читайте также:  Yamaha rx v340 характеристики

То есть вызываются 3 разные функции move.

0

Отправлять сообщения
модераторам могут
только участники портала.
ВОЙТИ НА ПОРТАЛ »
регистрация »

Привет
Я хотел бы знать, каковы все различия между абстрактными классами и статическими классами в C#
Когда я использую что и почему?

правда ли, что абстрактный класс-это класс, который мы не можем создать его экземпляры?
Спасибо

4 ответов

Я хотел бы знать, каковы все различия между абстрактными классами и статическими классами в C#.

Не задавайте таких вопросов. Я мог бы часами перечислять сотни отличий, ни одно из которых не имело бы к вам отношения.

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

это больше похоже на правду.

абстрактный класс обычно предназначен для модель что-то в иерархии типов. Например, грузовик-это вид транспортного средства, а самолет-вид транспортного средства, поэтому у вас может быть автомобиль базового класса и производные классы грузовика и самолета. Но "транспортное средство" абстрактно; нет транспортных средств, которые были бы просто транспортными средствами, не будучи чем-то более конкретным. Вы представляете это понятие абстрактным классом.

статический класс, напротив, не предназначен для моделирования вообще ничего. Это просто удобный способ хранения куча кодов. На самом деле это вообще не должен быть класс; VB сделал лучший выбор, назвав такие вещи "модулями", а не "классами". Хотя технически они наследуются от object, статические классы логически вообще не находятся в иерархии типов. Они просто ведро для хранения статических членов.

статические классы часто используются в качестве контейнеров методов расширения.

когда я использую что и почему?

использовать абстрактный класс, когда вы хотите построить модель вида "X-это своего рода Y". Например, "автомобиль-это своего рода транспортное средство", или "квадрат-это своего рода форма", или "журнал-это своего рода издание", где "Y" — абстрактное понятие. Не используйте его для таких вещей, как" сотрудник-это своего рода человек " — человек должен быть конкретным. Человек-это не абстрактное понятие; есть люди, которые просто люди, но нет машин, которые не что-то другое.

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

правда ли, что абстрактный класс-это класс, который мы не можем создать его экземпляры?

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

Читайте также:  Как отключить нежелательные смс

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

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

вот вопрос, который вы не задали:

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

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

это правда, что невозможно создать экземпляр abstract или static класс, но это о том, где сходства заканчиваются.

  • может наследовать от abstract не может наследовать от static
  • может иметь методы экземпляра на abstract не может иметь экземпляр на static
  • An abstract класс может реализовать интерфейс a static класс не может

принципиально они пытаются служить двум разным целям

  • An abstract класс формирует синюю печать / шаблон, который затем реализуется в производных классах различными и (надеюсь) прозрачными способами
  • A static class-это просто контейнер для коллекции, возможно, связанных static методы

An abstract class-это класс, который должен быть унаследован для использования — он может быть унаследован только.
Вы можете создавать экземпляры классов, которые наследуют его.

A static class-это класс, который вообще не может иметь экземпляров; такой класс имеет только static членов.
static классы не могут быть унаследованы, как и другие классы.

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

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

Ссылка на основную публикацию
Смартфоны с флагманской камерой
Мощный, стильный флагманский смартфон — это не только полезный девайс, но и часть имиджа. Конечно, стоит флагман гораздо дороже, чем...
Симс 3 постоянно вылетает
Вылеты из игры могут быть обусловлены совершенно различными причинами. Здесь мы рассмотрим лишь те проблемы, которые встречаются у игроков чаще...
Симс фриплей новое обновление
The Sims FreePlay Отправьте любимых персонажей на романтическое свидание или помогите им открыть собственный бизнес в последнем обновлении «Изысканные обеды»!...
Смартфоны хонор в днс
Нет в наличии Нет в наличии Нет в наличии Нет в наличии Нет в наличии Нет в наличии Нет в...
Adblock detector