Logo CitForum CITForum на CD Форумы Газета Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

10.03.2010

Google
WWW CITForum.ru

5.3.4. Использование наследования

В языке C++ наследование устанавливается только при составлении программы и не может быть изменено в процессе ее выполнения. Поведение каждого объекта полностью определяется классом этого объекта и одинаково для всех объектов данного класса. Все характеристики наследования одинаковы для всех объектов каждого класса.

Список суперклассов (если он не пуст) указывается в начале определения каждого класса; подкласс называется также производным классом. В следующем примере приведено описание класса Item, а также описания подкласса Shape класса Item и подклассов Box и Circle класса Shape:


	class Item

	{

	public:

	  virtual void cut ();

	  virtual void move (Length deltax, Length deltay) = 0;

	  virtual Boolean pick (Length px, Length py) = 0;

	  virtual void ungroup () = 0;

	};

	class Shape: public Item

	{

	protected:

	  Length x;

	  Length y;

	public:

	  void cut ();

	  void draw () {write (COLOR_FOREGROUND);};

	  void erase (); {write (COLOR_BACKGROUND);};

	  void move (Length deltax, Length deltay);

	  Boolean pick (Length px, Length py) = 0;

	  void ungroup () { };

	  virtual void write (Color color) = 0;

	};

	class Box: public Shape

	{

	protected:

	  Length width;

	  Length height;

	public:

	  Box (Length x0, Length y0, Length width0, Length height0);

	  Boolean pick (Length px, Length py);

	  void write (Color color);

	};

	class Circle: public Shape

	{

	protected:

	  Length radius;

	public:

	  Circle (Length x0, Length y0, Length radius0);

	  Boolean pick (Length px, Length py);

	  void write (Color color);

	};

Члены суперкласса (атрибуты и операции) наследуются его подклассами (члены, определенные в суперклассе, имеются у всех его подклассов). Члены суперкласса, определенные в нем как private, недоступны для операций его подклассов; для операций подклассов доступны члены суперкласса, определенные в нем protected и как public. Методы, определенные в суперклассе, могут быть переопределены в (некоторых) его подклассах, если они определены как виртуальные (virtual). Например, метод write класса Shape может быть переопределен в его подклассах Box и Circle, поэтому он определен как виртуальный; методы и в подклассах не переопределяются, поэтому их можно не объявлять как виртуальные. Если в определении виртуального метода указана его "инициализация" к 0 (virtual void write (Color color) = 0;), то он обязательно должен быть переопределен в каждом его подклассе (такой метод называется абстрактным). Класс, содержащий хотя бы один абстрактный метод, также называется абстрактным. Для абстрактных классов нельзя порождать объекты (объекты определены только для его подклассов). Если все методы класса определены как абстрактные, то говорят, что такой (абстрактный) класс определяет интерфейс, реализуемый в его подклассах.

В языке C++ поддерживается множественное наследование: каждый класс может иметь один или несколько суперклассов.

Назад | Содержание | Вперед

Подписка на новости CITForum.ru

Новые публикации:

17 февраля

  • MapReduce и параллельные СУБД: друзья или враги?

  • Объектно-ориентированное программирование в ограничениях: новый подход на основе декларативных языков моделирования данных

  • Системологический подход к декомпозиции в объектно-ориентированном анализе и проектировании программного обеспечения

    Газета:

  • Эволюция Wine

    3 февраля

  • Дом на песке

  • Реальное переосмысление "формальных методов"

  • Интервью с Найджелом Пендзом

    Газета:

  • iPad. Первый взгляд на долгожданный планшет от Apple

  • Я не верю в iPad

    20 января

  • SQL/MapReduce: практический подход к поддержке самоописываемых, полиморфных и параллелизуемых функций, определяемых пользователями

  • Данные на лету: как технология потокового SQL помогает преодолеть кризис

    Обзоры журнала Computer:

    2 декабря

  • Сергей Кузнецов. Год эпохи перемен в технологии баз данных

    18 ноября

  • Генерация тестовых программ для подсистемы управления памятью микропроцессора

  • Сравнительный анализ современных технологий разработки тестов для моделей аппаратного обеспечения

    11 ноября

  • Генерация оптимизированных для ручного выполнения сценариев тестирования приложений с графическим интерфейсом пользователя

  • Применение технологии UniTESK для функционального тестирования инфаструктурного ПО Грид

    28 октября

  • Remoting с сервером на Unmanaged C++ или Вторая жизнь старых приложений

  • Методы обеспечения переносимости ПО

  • Организация сложных тестовых наборов

    22 октября

    Обзоры журнала Computer:

    14 октября

  • МОГучие способности: новые приемы анализа больших данных

  • Учимся регулярно выражаться

    8 октября

  • Записки исследователя NTFS

  • Создание кросс-платформенных графических интерфейсов на wxPerl

    Все публикации >>>


  • IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

    Информация для рекламодателей PR-акции, размещение рекламы — тел. +7 495 6608306, ICQ 232284597 Пресс-релизы — pr@citforum.ru
    Послать комментарий
    Информация для авторов

    Редакция раздаёт котят!

    Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
    Copyright © 1997-2000 CIT, © 2001-2009 CIT Forum
    Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...