Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
|
Void ToLower(void);int GetLength(void) const; // неизменяемый метод // сообщить длину строки private: char* str; int length;}; n если аргументом какой-либо функции объявлена ссылка на неизменяемый объект, то, соответственно, эта функция может вызывать только методы, объявленные как const: int Lexer::CharCounter(const String& s, char c) { int n = s.GetLength(); // допустимо s.Concat("ab"); // ошибка – Concat изменяет значение s }
Общее правило n Для предотвращения случайных ошибок рекомендуется как можно больше методов объявлять как const, так как объявление константных аргументов запрещает изменение объектов во время выполнения функций n Переопределение операций n Они называются операциями потому, что их запись имеет тот же вид, что и запись операции сложения, умножения и т.п. со встроенными типами языка С++. Пример 1 n Определим две операции в классе String – сравнение на меньше и сложение: class String В остальном операция мало чем отличается от обычного метода класса. Теперь в программе можно записать: String s1, s2; n Результатом операции сложения является объект типа String. Никакой из аргументов операции не изменяется. n Описатель const при описании аргумента говорит о том, что s2 не может измениться при выполнении сложения. n Описатель const в конце определения операции говорит то же самое об объекте, выполняющем сложение. n Реализация может выглядеть следующим образом:
n При сравнении на меньше мы будем сравнивать строки в лексикографической последовательности. n То есть меньше та строка, которая должна стоять раньше по алфавиту: } } Преобразования типов n Преобразованием типов – преобразование, при котором типы величин, участвующие в выражении, преобразуются к типам, для которых операция задана. При этом в заданном выражении используются операции с типами, для которых она (операция) явно не задана. Явные преобразования типов n Если перед выражением указать имя типа в круглых скобках, то значение выражения будет преобразовано к указанному типу: double x = (double)1; n Главный недостаток – полное отсутствие контроля n Для того чтобы преобразовывать типы, хотя бы с минимальным контролем, можно записать Стандартные преобразования типов n К стандартным преобразованиям относятся преобразования целых типов и преобразования указателей. Они выполняются компилятором автоматически. n Величины типа char, unsigned char, short или unsigned short преобразуются к типу int, если точность типа int достаточна, в противном случае они преобразуются к типу unsigned int. n Величины типа wchar_t и константы перечисленных типов преобразуются к первому из типов int, unsigned int, long и unsigned long, точность которого достаточна для представления данной величины. n Битовые поля преобразуются к типу int, если точность типа int достаточна, или к unsigned int, если точность unsigned int достаточна. В противном случае преобразование не производится. n Логические значения преобразуются к типу int, false становится 0 и true становится 1. Правила стандартных преобразований при выполнении арифметических операций n вначале, если в выражении один из операндов имеет тип long double, то другой преобразуется также к long double; n в противном случае, если один из операндов имеет тип double, то другой преобразуется также к double; n в противном случае, если один из операндов имеет тип float, то другой преобразуется также к float; n в противном случае производится безопасное преобразование.
n затем, если в выражении один из операндов имеет тип unsigned long, то другой также преобразуется к unsigned long; n в противном случае, если один из операндов имеет тип long, а другой – unsigned int, и тип long может представить все значения unsigned int, то unsigned int преобразуется к long, иначе оба операнда преобразуются к unsigned long; n в противном случае, если один из операндов имеет тип long, то другой преобразуется также к long; n в противном случае, если один из операндов имеет тип unsigned, то другой преобразуется также к unsigned; Все приведенные преобразования типов производятся компилятором автоматически, и обычно при компиляции даже не выдается никакого предупреждения, поскольку не теряются значащие цифры или точность результата. К сведению n При выполнении операции присваивания со стандартными типами может происходить потеря точности. n Большинство компиляторов при попытке такого присваивания выдают предупреждение или даже ошибку. n Например, при попытке присваивания n Именно поэтому большинство компиляторов выдаст ошибку и не будет транслировать подобные конструкции. Шаблоны классов. n Алгоритм выполнения какого-либо действия можно записывать независимо от того, какого типа данные обрабатываются. Простейшим примером служит определение минимума из двух величин. if (a < b) Независимо от того, к какому именно типу принадлежат переменные a, b и x, если это один и тот же тип, для которого определена операция "меньше", запись будет одна и та же. Было бы естественно определить функцию min, возвращающую минимум из двух своих аргументов.
|