Функции-члены класса СИ++ - определение - внутри или за пределами класса (снаружи) - какая разница
Primary tabs
использую замечательную статью = http://codingrus.ru/readarticle.php?arti...
Определить функции-члены класса можно внутри описания класса или за его пределами
Встраиваемые функции
В первом случае функция считается встраиваемой (если разрешена соответствующая опция в установках компилятора).
Встраиваемая функция характерна тем, что компилятор С++ обрабатывая вызовы этой функции в программе , заменяет их на непосредственно объектный код, соответствующей определению этой функции.
Вследствие этого нужно помнить, что встраиваемые функции, как правило, имеют короткие определения (уточню - должны иметь короткие определения для оптимальности выполнения программы).
Автор приводит пример =
class CDate { int mounth, day, year; public: GetDate() {return Day}; SetDate(int,int,int); };
В примере выше функция GetDate автоматически определяется как встраиваемая, в то время как SetDate, и другие функции, описанные вне класса CDate будут организованы по обычным правилам языка С++.
Обычное описание метода класса
Под обычными правилами, подразумевается описание с указанием области видимости функции (для функции-члена класса областью видимости будет являться сам класс). Например - ниже приведено описание конструктора, код которого вынесен за рамки описания класса - класс содержит только объявление данного конструктора =
class employee { public: employee(char *, char *, float); // объявление конструктора void show_employee(void); // объявление как-то другого метода("функции-члена") класса private: char name [ 64 ]; char position[64]; float salary; }; // далее описание (непосредственно код) конструктора класса employee employee::employee(char *name, char *position,float salary) { strcpy(employee::name, name); strcpy(employee::position, position); employee::salary = salary; }
последний пример взят отсюда
При этом - в статье , на которую мы опираемся при составлении данной сказано:
В определениях всех методов класса элементы данных класса, которому принадлежит определяемый метод, доступны без указания элементов данных в списке параметров метода. Эта особенность синтаксиса языка C++ во многом упрощает программирование классов и делает программы более обозримыми.
относительно примера выше - мы тоже можем заметить , что для обращения к employee::salary =
employee::salary = salary;
мы передали в конструктор, только некое одноимённое значение для параметра salary =
....float salary)
к полю же класса типа employee мы обращаемся напрямую в коде конструктора - ранее не передавае его как параметр =
employee::salary = salary;
- Log in to post comments
- 5563 reads