![]()
Главная Обратная связь Дисциплины:
Архитектура (936) ![]()
|
Синтаксис производного класса
Производный класс можно рассматривать как расширение существующего класса. Исходный класс называется базовым или родительским, а производный – подклассом или потомком. Производный класс представляет собой расширение или модификацию базового класса. Имея родительский класс, можно использовать единый интерфейс для получения нескольких производных классов. Любой класс может быть родительским, и любой производный класс будет следовать его описанию. Класс-потомок может иметь дополнительные возможности по сравнению с базовым классом. В производном классе можно изменить права доступа, добавить новые элементы или перегрузить имеющиеся методы. Синтаксис производного класса: class ИмяПроизводногоКласса:(public/private/protected) ИмяРодительскогоКласса {. . . }; Слова public, private и protected являются модификаторами доступа методов производного класса к элементам родительского класса. Модификатор public не меняет тип доступа, модификатор private делает для всех элементов базового класса тип доступа private, а модификатор protected разрешает доступ методов производного класса к общим элементам базового класса, но запрещает доступ для всех других методов. Если необходимо некоторым элементам изменить тип доступа, то их объявляют в производном классе повторно в соответствующей секции. Если производный класс имеет всего один родительский класс, то такое наследование называется простым, в противном случае наследование называется сложным. Пример сложного наследования: class A{. . .}; class B{. . .}; class C:public A, protected B{. . .}; Вопрос 95 Совместное использование операторов if-else-if и switch В следующем примере выполняется преобразование имеющегося значения длины в футах в значение другой системы измерений: #include enum conversion_type {YARDS, INCHES, CENTIMETERS, METERS} C_Tconversion; return (0); } В данном примере константы единиц измерений представлены перечислением conversion_type. Первый блок switch/case предназначен для того, чтобы на основании введенного пользователем значения проинициализировать переменную C_Tconversion типа conversion_type.
Соглашения об именах 1.1 Общие положения · Всегда используйте выразительные и тщательно продуманные имена. Первые буквы слов должны быть прописными (кроме некоторых особых исключений, рассматриваемых далее). · Все слова в имени пишутся слитно. · Избегайте использования подчеркивания (‘_’), за исключением макросов и ресурсов ID. void TObject::PrepareForCommit(); class CGlobalText; // см. соглашения по именам классов и типов TInt elementOffset; // переменные automatic начинаются с маленькой буквы · Используйте полные англоязычные дескрипторы, точно характеризующие переменные, поля или классы. Например, применяйте имена firstName, grandTotal или CorporateCustomer. И хотя имена типа x1. y1 или fn набирать на клавиатуре просто (они короткие), но они, чаще всего, не несут никакой смысловой нагрузки, и в результате код трудно понимать, поддерживать и расширять. · Используйте термины, применимые в предметной области, для которой пишется программа. Если ваши пользователи называют клиентов заказчиками, то используйте имя Customer, а не Client для соответствующего класса. Многие разработчики ошибочно сами создают свои названия для концептов в то время, как в предметной области обычно уже существует своя устоявшаяся терминология. · Используйте смешанные регистры, чтобы сделать имена читаемыми. Первая буква имени класса или интерфейса, а также слова, не являющегося аббревиатурой, должна быть прописной, а остальные – строчными. · Аббревиатуры желательно применять не часто, а если уж используете их, то это надо делать разумно, т.е. нужно поддерживать список стандартных коротких форм (аббревиатур), и они должны быть согласованы. Например, если нужно придумать аббревиатуру для слова number, то желательно использовать одно из таких сокращений, как nbr, no или num, документируйте то, что выбрали, и используйте только его. · Избегайте длинных имен (предпочтительней длина менее 15 символов). Бывают и исключения, например, имя класса PhysicalOrVirtualProductOrService, похоже, приемлемо, хотя и слишком длинное. Возможно, его можно назвать и короче, к примеру, Offering. · Избегайте имен, которые отличаются только на одну букву либо регистром. Например, имена переменных persistentObject и persistentObjects не должны применяться вместе, как и идентификаторы anSqlDatabase и anSQLDatabase. · Стандартные акронимы должны начинаться с прописной буквы. Имена часто содержат стандартные аббревиатуры, например, SQL для Structured Query Language. Имена sqlDatabase для атрибута и SqlDatabase для класса лучше читаемы, чем sQLDatabase и SQLDatabase соответственно. Основные и производные типы можно поименовать с помощью механизма typedef Существует потенциально бесконечное число производных типов, которые строятся из основных типов следующими способами: массив объектов данного типа, $$R.8.4; функции, имеющие параметры данного типа и возвращающие объекты данного типа, $$R.8.2.5; указатели на объекты или функции данного типа, $$R.8.2.1; ссылки на объекты или функции данного типа, $$R.8.2.2; константы, являющиеся значениями данного типа, $$R.7.1.6; классы, содержащие совокупность объектов различных типов ($$R.9), набор функций для управления этими объектами ($$R.9.3) и и список ограничений на доступ к этим объектам и функциям, $$R.11; структуры, которые являются классами без стандартных ограничений на доступ, $$r.11; объединения, которые являются структурами, способными содержать в разное время объекты различных типов, $$R.9.5; указатели на члены классов, которые задают члены данного типа среди всех объектов данного класса, $$R.8.2.3. В общем случае указанные методы построения объектов могут применяться рекурсивно, ограничения приведены в $$r.8.2.1, $$R.8.2.4, $$R.8.2.5 и $$R.8.2.2. Про указатель на объекты типа T говорят "указатель на на T". Например, про указатель на объект типа int говорят "указатель на int", а указатель на объект класса X называется "указатель на X". Объекты типа void* (указатель на void), const void* и volatile void* могут использоваться как указатели на объекты неизвестного типа. Объект типа void* должен иметь достаточно памяти, чтобы хранить указатель на любой объект. Все фрагменты руководства, говорящие об "указателях", не относятся к указателям на члены, за исключением указателей на статические члены.
97.
![]() |