R.10 Производные классы
R.10 Производные классы
В описании класса можно указать список базовых классов с помощью следующих конструкций:
спец-базовых:
: список-базовых
список-базовых:
спецификация-базовых
список-базовых , спецификация-базовых
спецификация-базовых:
полное-имя-класса
virtual спецификация-доступа opt полное-имя-класса
спецификация-доступа virtual opt полное-имя-класса
спецификация-доступа:
private
protected
public
Конструкция имя-класса в спецификации-базовых должна обозначать ранее описанный класс (§R.9), который называется базовым по отношению к определяемому классу. Говорят, что класс является производным от своих базовых классов. Назначение конструкции спецификация-доступа объясняется в §R.11. К членам базового класса, если только они не переопределены в производном классе, можно обращаться так, как будто они являются членами производного класса. Говорят, что производный класс наследует члены базового класса. С помощью операции разрешения области видимости :: (§R.5.1) к члену базового класса можно обращаться явно. Такое обращение возможно и в том случае, когда имя члена базового класса переопределено в производном классе. Производный класс сам может выступать как базовый при контроле доступа, см. §R.11.2. Указатель на производный класс может неявно преобразовываться в указатель на однозначно определенный и доступный базовый класс (§R.4.6). Ссылка на производный класс может неявно преобразовываться в ссылку на однозначно определенный и доступный базовый класс (§R.4.7).
Рассмотрим пример:
class base {
public:
int a, b;
};
class derived: public base {
public:
int b, c;
};
void f()
{
derived d;
d.a = 1;
d.base::b = 2;
d.b = 3;
d.c = 4;
base* bp = &d; // стандартное преобразование derived* в base*
}
Здесь присваиваются значения четырем членам d, а bp настраивается на d.
Класс называется прямым базовым, если он находится в списке-базовых, и косвенным базовым, если сам не являясь прямым базовым, он служит базовым для одного из классов списка-базовых.
Отметим, что в обозначении имя-класса :: имя конструкция, имя может быть именем члена косвенного базового класса. Такое обозначение просто указывает класс, в котором следует начинать поиск этого имени.
Приведем пример:
class A { public: void f(); }
class B: public A {};
class C: public B { public: void f(); }
void C::f()
{
f(); // вызов f() из C
A::f(); // вызов f() из A
B::f(); // вызов f() из A
}
Здесь дважды вызывается A::f(), поскольку это единственная функция f() в классе B.
Инициализация объектов, представляющих базовые классы, задается в конструкторах, см. §R.12.6.2.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Производные данные
Производные данные Я уже упомянул выше, что, зная IP-адреса, можно определить географическое расположение пользователя, а зная referrer – запрос, по которому пользователь нашел ссылку на наш сайт в поисковой системе. Это так называемые производные данные – они получены за
37. Производные классы
37. Производные классы Производные классы предоставляют простой и эффективный аппарат задания для класса альтернативного интерфейса и установления класса путем добавления возможностей к уже существующему классу без перепрограммирования или перекомпиляции. С помощью
R.3.6.2 Производные типы
R.3.6.2 Производные типы Существует потенциально бесконечное число производных типов, которые строятся из основных типов следующими способами:массив объектов данного типа, §R.8.4;функции, имеющие параметры данного типа и возвращающие объекты данного типа, §R.8.2.5;указатели на
Классы
Классы Класс — это структура, предназначенная для хранения данных (полей и свойств), а также кода, обрабатывающего эти данные (методы). Поля, методы и свойства называют членами класса.Класс может быть создан на основе другого класса — в этом случае он называется
5. Производные операции
5. Производные операции Итак, мы рассмотрели различные варианты операций соединения, а именно операции внутреннего соединения, левого, правого и полного внешнего соединения, которые являются производными восьми исходных операций реляционной алгебры: унарных операций
3. Производные правила вывода
3. Производные правила вывода Другим примером правил, с помощью которых можно, при необходимости вывести новые правила функциональной зависимости, являются так называемые производные правила вывода.Что это за правила, как они получаются?Известно, что если из одних
1.3.2 Производные Типы
1.3.2 Производные Типы Вот операции, создающие из основных типов новые типы:* указатель на *const константный указатель на amp; ссылка на [] вектор* () функция, возвращающая– * одномерный массив. Это принятый термин (например, вектора прерываний), и мы сочли, что стандартный перевод
1.13 Производные классы
1.13 Производные классы Теперь давайте определим вектор, для которого пользователь может задавать границы изменения индекса.class vec: public vector (* int low, high; public: vec(int,int);int amp; elem(int); int amp; operator[](int); *);Определение vec как :public vectorозначает, в первую очередь, что vec – это vector. То есть, тип vec
2.3.3 Производные Типы
2.3.3 Производные Типы Другие типы можно выводить из основных типов (и типов, определенных пользователем) посредством операций описания:* указатель amp; ссылка [] вектор () функцияи механизма определения структур. Например:int* a; float v[10]; char* p[20]; // вектор из 20 указателей на символ
Глава 7 Производные Классы
Глава 7 Производные Классы Не надо размножать объекты без необходимости У. Оккам В этой главе описывается понятие производного класса в С ++. Производные классы дают простой, гибкий и эффективный апарат задания для класса альтернативного интерфейса и опредления класса
7.2 Производные Классы
7.2 Производные Классы Чтобы разделить задачи понимания аппарата языка и метдов его применения, знакомство с понятием производных классов делается в три этапа. Вначале с помощью небольших примеров, которые не надо воспринимать как реалистичные, будут описанысами
4.4 Производные Типы
4.4 Производные Типы Кроме основных арифметических типов концептуально сществует бесконечно много производных типов, сконструированых из основных типов следующим образом:массивы объектов данного типа;функции, получающие аргументы данного типа и возвращащие объекты
8.5.3 Производные Классы
8.5.3 Производные Классы В конструкциисост идентификатор : public opt typedef-имяtypedef-имя должно означать ранее описанный класс, назваемый базовым классом для описываемого класса. Говорится, что последний выводится из предшествующего (является проиводным от него). По поводу смысла
Классы
Классы ОО-метод основан на понятии класса. Неформально, класс - элемент ПО, описывающий абстрактный тип данных и его частичную или полную реализацию. Абстрактный тип данных - множество объектов, определяемое списком компонентов (features) - операций, применимых к этим
Отложенные классы как частичные интерпретации: классы поведения
Отложенные классы как частичные интерпретации: классы поведения Не все отложенные классы так близки к АТД как STACK. В промежутке между полностью абстрактным классом, таким как STACK, в котором все существенные компоненты отложены, и эффективным классом, таким как FIXED_STACK,