Главная

Популярная публикация

Научная публикация

Случайная публикация

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

ТОР 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++ всего одна операция которая принимает три операнда - условная операция. Операции с тремя операндами называются тернарными.

Ну и собственно сами операции. Здесь перечислены почти все операции. Для каждой операции указан приоритет.

Приоритет Операция Описание
  :: контекст
  -> операция непрямого доступа к членам класса
  . операция точки (доступ к полю)
  [] индекс массива
  () вызов функции
  ++ -- инкремент и декремент
     
  ~ поразрядное НЕ
  ! логическое НЕ
  - унарный минус
  * операция разыменования
  new delete выделение памяти из кучи
  .* доступ к указателю-члену
  * / % умножение, деление и взятие остатка
  + - сложение и вычитание
  >> << поразрядный сдвиг вправо и влево
  > >= <= < условные операции
  ==!= операции проверки на равенство
  & поразрядное И
  ^ поразрядное исключающее ИЛИ
  | поразрядное ИЛИ
  && логическое И
  || логическое ИЛИ
  ?: условная операция
  = *= /= %= += -= операции присваивания
  <<= >>= поразрядные операции сдвига с присваиванием
  &= |= ^= поразрядные логическоие операции с присваиванием
  , запятая

Понятие ассоциативности, приоритета, размерности. Таблица приоритета операций.

 

 
 

 

 
 

 

 

 

 

 

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных