ТОР 5 статей: Методические подходы к анализу финансового состояния предприятия Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века Характеристика шлифовальных кругов и ее маркировка Служебные части речи. Предлог. Союз. Частицы КАТЕГОРИИ:
|
Операторы управления областью видимости.И так продолжаем изучение классов, на этот раз я хотел поговорить об операторах разрешения области видимости, научимся так же определять функции-члена, узнаете, что такое встраиваемые функции-члены. Для начала обратите внимание на символ:: его используют между именем класса и именем его члена, а называют его оператором разрешения области видимости. Так же оператор:: используют для описания функции, где имя класса будет пустым.
addCourse () \\ дана функция ::addCourse(int, float) \\ а вот так функция описана Многие считают, что этот оператор не нужен, но в некоторых случаях такой оператор является необходимым. float addCourse (in hours, float grade) { return hours*grade; } class student { public: int semesterhours; float gpa; // добавить пройденный курс к записи float addCourse (in hours, float grade) < //вызвать внешнюю функцию weightedGPA=addCourse(semesterhours, gpa); // вызвать ту же функцию для подсчета оценки с учетом нового курса weightedGPA+=addcourse (hours, grade); gpa= weightedGPA / semesterhours; //вернуть новую оценку return gpa; } } В данном примере я хочу, чтобы функция-член student:: addCourse () вызывала функцию – не член:: addCourse (). Без оператора:: вызов функции addCourse () внутри класса student приведет к вызову функции student::addCourse (). Обратите внимание на то, что вызов функции без указания имени класса приводит к тому что, она вызывает саму себя. Добавление оператора:: в начале имени заставляет осуществить вызов глобальной версии этой функции и это прекрасно: //addCourse - функция перемножает кол-во часов и оценку float addCourse (in hours, float grade) { return hours*grade; } class student { public: int semesterHours; flaot gpa; //добавить прйденный курс к записи float addCourse (int hours, float grade) { //вызвать внешнюю функцию weightedGPA =::addCourse (semesterHours, gpa); //вызвать ту же функцию для подсчёта оценки с новым курсом weightesGPA+=::addCourse(hours, grade); gpa=weightesGPA/semesterHours; //вернуть новую оценку return gpa; } } Определение функции-члена Функция член может быть определена как внутри класса, так и отдельно от него. Определение внутри класса выглядит вот так: class student { public: int semesterHours; flaot gpa; //добавить прйденный курс к записи float addCourse (int hours, float grade) { //Подчитаем суммарное время курсов с учётом среднего бала float weightGPA; weightedGPA = semesterHours * gpa; //добавляем новый курс semesterHours += hours; weightedGPA+=grade * hours; gpa = weightedGPA/semesterHours; //вернуть новую оценку return gpa; } } А теперь давайте погорим подробно об определении функции-члена вне класса. Как правило, которое выявлено на практике многими программистами, для больших функций встраивание тела функции может привести к созданию очень больших и неразборчивых определений классов. Во избежание этого, C++ предоставляет возможность определять тела функции-члена вне класса. class Student { public: int semesterHours; float; gpa; //добавить пройденный курс к записи float addCourse(int hours, float grade) }; //Добавление информации о пройденом курсе к полям класса Student float Student::addCourse(int hours, float grade) { float weightedGPA; weightedGPA=semesterHours *gpa; //Добавление нового курса semesterHours+=hours; weightedGPA+=grade * hours; gpa=weightedGPA/semesterHours; return gpa; } Самое интересное, что теперь объявление класса содержит только прототип функции addCourse (), а сама функция прописана в другом файле. В примере класс и функция объявлены в одном файле. Советую, чтобы класс и тело функции находились в разных файлах.
Группы операций (особенности записи, таблица приоритетов). По количеству участвующих операндов, операции делятся на три группы: унарные - в операции один операнд. Бинарные - в операции участвуют два операнда. В языке C++ всего одна операция которая принимает три операнда - условная операция. Операции с тремя операндами называются тернарными. Ну и собственно сами операции. Здесь перечислены почти все операции. Для каждой операции указан приоритет.
Понятие ассоциативности, приоритета, размерности. Таблица приоритета операций.
Не нашли, что искали? Воспользуйтесь поиском:
|