Читайте также:
|
|
Наследование представляет собой способность производного класса наследовать характеристики существующего базового класса. Простыми словами это означает, что, если у вас есть класс, чьи элементы данных или функции-элементы могут быть использованы новым классом, вы можете построить этот новый класс в терминах существующего (или базового) класса. Новый класс в свою очередь будет наследовать элементы (характеристики) существующего класса. Использование наследования для построения новых классов сэкономит вам значительное время и силы на программирование. Объектно-ориентированное программирование широко использует наследование, позволяя вашей программе строить сложные объекты из небольших легко управляемых объектов.
Второй пример
Предположим, например, что вы используете следующий базовый класс 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 { <-------// Базовый класс | | | Защищенные элементы обеспечивают доступ и защиту |