Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Представление о наследовании

Читайте также:
  1. ВАШЕ ПРЕДСТАВЛЕНИЕ О ПЕРЕДАЧЕ ПОЛНОМОЧИЙ
  2. Введение понятия комплексного числа. Представление комплексного числа на плоскости
  3. Векторное представление комплексной огибающей сигналов с угловой модуляцией
  4. Векторное представление сигналов с АМ и DSB
  5. Видеть и слышать. Искусство. Красота Аскетизм. Представление. Проблемы. Пространство.
  6. Визуализация, или мысленное представление
  7. Вопрос 29. Гармоническое изображение (временное и векторное) гармонических колебаний (общее представление и конкретный пример).

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

Второй пример

Предположим, например, что вы используете следующий базовый класс book внутри существующей программы:

class book

{
public:
book (char *, char *, int);
void show_book(void);
private:
char title[64];
char author[б 4];
int pages;
};

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

char catalog[64];
int checked_out; // 1, если проверена, иначе О

Ваша программа может использовать наследование, чтобы породить класс library _card из класса book, как показано ниже:

class library_card: public book

{
public:
library_card(char *, char *, int, char *, int);
void show_card(void);
private:
char catalog[64];
int checked_out;
};

Следующая программа BOOKCARD.CPP порождает класс library_card из клacca book:

#include <iostream.h>

#include <string.h>

class book

{
public:
book(char *, char *, int);
void show_book(void);
private:
char title [64];
char author[64];
int pages;
};

book::book(char •title, char *author, int pages)

{
strcpy(book::title, title);
strcpy(book::author, author);
book::pages = pages;
}

void book::show_book(void)

{
cout << "Название: " << title << endl;
cout << "Автор: " << author << endl;
cout << "Страниц: " << pages << endl;
}

class library_card: public book

{
public:
library_card(char *, char *, int, char *, int);
void show_card(void);
private:
char catalog[64];
int checked_out;
};

library_card::library_card(char *title, char *author, int pages, char *catalog, int checked_out): book(title, author, pages)

{
strcpy(library_card::catalog, catalog);
library_card::checked_out = checked_out;
}

void 1ibrary_card::show_card(void)

{
show_book();
cout << "Каталог: " << catalog << endl;
if (checked_out) cout << "Статус: проверена" << endl;
else cout << "Статус: свободна" << endl;
}

void main(void)

{
library_card card("Учимся программировать на языке C++", "Jamsa", 272, "101СРР", 1);
card.show_card();
}

Как и ранее, обратите внимание, что конструктор library _card вызывает конструктор класса book для инициализации элементов класса book. Кроме того, обратите внимание на использование функции-элемента show_book класса book внутри функции show_card. Поскольку класс library_card наследует методы класса book, функция show_card может вызвать этот метод (show_book) без помощи оператора точки, как если бы этот метод был методом класса library _card.

ЧТО ТАКОЕ ЗАЩИЩЕННЫЕ ЭЛЕМЕНТЫ

При изучении определений базовых классов вы можете встретить элементы, объявленные как public, private и protected (общие, частные и защищенные). Как вы знаете, производный класс может обращаться к общим элементам базового класса, как будто они определены в производном классе. С другой стороны, производный класс не может обращаться к частным элементам базового класса напрямую. Вместо этого для обращения к таким элементам производный класс должен использовать интерфейсные функции. Защищенные элементы базового класса занимают промежуточное положение между частными и общими. Если элемент является защищенным, объекты производного класса могут обращаться к нему, как будто он является общим. Для оставшейся части вашей программы защищенные элементы являются как бы частными. Единственный способ, с помощью которого ваши программы могут обращаться к защищенным элементам, состоит в использовании интерфейсных функций. Следующее определение класса book использует метку protected, чтобы позволить классам, производным от класса book, обращаться к элементам title, author и pages напрямую, используя оператор точку:

class book

{
public:
book(char *, char *, int);
void show_book(void);
protected:
char title [64];
char author[64];
int pages;
};

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


Дата добавления: 2015-07-15; просмотров: 69 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Производный класс //-----> class manager : public employee { <-------// Базовый класс| Защищенные элементы обеспечивают доступ и защиту

mybiblioteka.su - 2015-2024 год. (0.006 сек.)