Добавление функций-членов

Теперь необходимо добавить все функции, которые вы видели в классе СВох. Ранее вы уже определяли несколько функций-членов в определении класса, так что эти функции по умолчанию были встроенными (inline). Тот же результат можно получить, вводя код этих функций в определение класса вручную или же с помощью мастера Add Member Function Wizard (Мастер добавления функций-членов).

Казалось бы, можно определить каждую встроенную функцию в файле.срр с добавлением к ее определению ключевого слова inline, однако проблема в том, что встроенные функции на самом деле не являются "настоящими" функциями. Поскольку код тела каждой функции должен вставляться непосредственно в точку их вызова, определение функции должно быть доступно, когда компилируется файл, содержащий эти вызовы. Если этого не будет, вы получите ошибки компоновки и программа не заработает. Если хотите, чтобы функции-члены были встроенными, то необходимо включить определения функций в файл заголовка.h класса. Они могут быть определены либо в определении класса, либо немедленно вслед за ним, в файле.h. Необходимо поместить все глобальные встроенные функции, которые вам нужны, в файл.h и включить с помощью директивы #include этот файл в каждый файл.cрр, который использует их.

Чтобы добавить функцию GetHeight() как встроенную, щелкните правой кнопкой мыши на классе СВох во вкладке Class View и выберите пункт Add→Add Function (Добавить→Добавить функцию) из контекстного меню. Затем введите данные, определяющие функцию, в диалоговом окне, как показано на рис. 6.

Для возвращаемого значения можете указать тип double, выбрав его в раскрывающемся списке, но точно так же его можно ввести вручную. Очевидно, что тип, которого нет в списке, придется вводить с клавиатуры. Установка флажка Inline (Встроенная) обеспечивает создание функции GetHeight() как встроенной. Среди других возможностей объявления функции имеются флажки Static (Статическая), Virtual (Виртуальная) и Pure (Чистая). Функция GetHeight() не имеет параметров, так что ничего более добавлять не нужно. Щелчок на кнопке ОК добавит определение функции к определению класса в файле Box.h.

Повторите этот процесс для функций-членов GetWidth(), GetLength() и Volume().

Рис. 6. Создание встроенной функции в мастере Add Member Function Wizard

В определение класса добавлен дополнительный раздел public, который содержит определения встроенных функций. Необходимо изменить каждое из определений так, чтобы обеспечить возврат правильного значения и объявлять функции как const. Например, код для функции GetHeight() должен быть изменен так, как показано ниже.

double GetHeight(void) const {return m_Height; }

Для ввода других функций можно воспользоваться мастером Add Member Function Wizard.(рис.7)

Рис. 7. Создание обычной функции в мастере Add Member Function Wizard

Функция operator+ () определена как public с типом возвращаемого значения СВох. Тип параметра и его имя также должны быть введены в соответствующих полях. Потребуется щелкнуть на кнопке Add (Добавить) для регистрации параметра, а только затем щелкать на кнопке Finish (Готово). Это также обновит сигнатуру функции, показанную в нижней части диалогового окна Add Member Function Wizard. Затем введите детали другого параметра, если их больше одного, и снова щелкните на кнопке Add, чтобы добавить его. Введенные в этом диалоговом окне комментарии мастер поместит в файлы Box.h и Box.срр. Когда вы щелкаете на кнопке Finish, объявление функции добавляется к определению класса в файле Box.h, а каркас определения функции — в файл Box.срр. Функция должна быть объявлена как const, поэтому необходимо добавить это ключевое поле к объявлению функции operator+() в определении класса и к определению функции в файле Box.срр.

Этот процесс потребуется повторить для функций operator*() и operator/().которые вы видели ранее. По завершении определение класса в файле заголовка Box.h будет выглядеть так, как показано ниже.

Необходимо также добавить код в тело всех функции самостоятельно. Содержимое файла Box.cpp в конечном итоге будет выглядеть примерно так:

#include "Box.h"

CBox::CBox(double lv, double wv, double hv){…}

CBox::~CBox(void){ }

CBox CBox::operator+(const CBox& aBox) const {…}

// Умножение ящика на целое число

CBox CBox::operator*(int n) const {…}

// Деление одного ящика на другой

int CBox::operator/(const CBox& aBox){…}

На этом создание класса СВох завершено, но еще потребуется определить глобальные функции, реализующие операторы сравнения объема объекта СВох с числовым значением.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: