Главная Обратная связь

Дисциплины:

Архитектура (936)
Биология (6393)
География (744)
История (25)
Компьютеры (1497)
Кулинария (2184)
Культура (3938)
Литература (5778)
Математика (5918)
Медицина (9278)
Механика (2776)
Образование (13883)
Политика (26404)
Правоведение (321)
Психология (56518)
Религия (1833)
Социология (23400)
Спорт (2350)
Строительство (17942)
Технология (5741)
Транспорт (14634)
Физика (1043)
Философия (440)
Финансы (17336)
Химия (4931)
Экология (6055)
Экономика (9200)
Электроника (7621)






Синтаксис производного класса



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

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

Синтаксис производного класса:

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

В следующем примере выполняется преобразование имеющегося значения длины в футах в значение другой системы измерений:
В этой программе на языке С демонстрируется использование
конструкции if /else/if в сочетании с конструкцией switch/ case.

#include enum conversion_type {YARDS, INCHES, CENTIMETERS, METERS} C_Tconversion;
int main() { int iuser_response;
float fmeasurement, ffoot;
printf("\nВведите значение длины в футах: ");
scanf("%f",&ffoot) ;
printf("\nВозможные единицы измерений: \ \
n\t\t0 - ЯРДЫ \ \
n\t\t1 – ДЮЙМЫ \ \
n\t\t2 - САНТИМЕТРЫ \
\n\t\t3 - МЕТРЫ \
\n\n\t\tBaш выбор — >> ");
scanf("%d",&iuser_response) ;
switch (iuser_response) ( case 0 : C_Tconversion = YARDS;
break; case 1 : C_Tconversion = INCHES;
break; case 2 : C_Tconversion = CENTIMETERS;
break; default : C_Tconversion = METERS;
if (C_Tconversion == YARDS) fmeasurement = ffoot/3;
else if (C_Tconversion == INCHES) fmeasurement = ffoot * 12;
else if (C_Tconversion == CENTIMETERS) fmeasurement = ffoot * 30.48; else fmeasurement = ffoot * 30.48/100;
switch (C Tconversion) { case YARDS : printf("\n\t\t%4.2f ярдов", fmeasurement);
break; case INCHES : printf("\n\t\t%4.2f дюймов", fmeasurement);
break; case CENTIMETERS : printf("\n\t\t%4.2f сантиметров", fmeasure'ment) ;
break; default : printf("\n\t\t%4.2f метров", fmeasurement); }



return (0);

}

В данном примере константы единиц измерений представлены перечислением conversion_type. Первый блок switch/case предназначен для того, чтобы на основании введенного пользователем значения проинициализировать переменную C_Tconversion типа conversion_type.
Затем в блоке вложенных инструкций if/else/if выполняется соответствующее преобразование. Наконец, в последнем блоке switch/case полученное значение выводится на экран.

 

Соглашения об именах

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.


Эта страница нарушает авторские права

allrefrs.ru - 2019 год. Все права принадлежат их авторам!