Лекция 1
.pdf
Встроенные (inline)
функции
Встраиваемой функцией называется функция код которой подставляется в то место строки программы, из которого она вызывается, т.е. вызов такой функции заменятся еѐ кодом.
Для встраивания функции:
1.Используется модификатор inline.
2.Функция определяется внутри тела класса
Встроенные (inline)
функции
Действие не выполняется если:
функция содержит цикл или инструкцию goto;
функция рекурсивна;
функция содержит static переменные.
Дружественные функции
Для того, чтобы сделать функцию другом класса, требуется включить еѐ в прототип в public раздел объявления и предварить ключевым словом friend
Функции «друзья» используются в следующих случаях:
для перегрузки операторов любых типов;
для упрощения функций ввода-вывода
когда члены двух классов находятся во взаимосвязи с другими частями программы.
Дружественные функции
#include <iostream> #include <cmath> using namespace std; class ComplexNumber {
int real, imaginary; public:
ComplexNumber(){
real = 0; imaginary = 0;} ComplexNumber(double r, double im);
void show();
void add(const ComplexNumber &cn); double abs();
friend void add(ComplexNumber &obj1, const ComplexNumber &obj2);
friend double abs(const ComplexNumber &obj1); };
ComplexNumber::ComplexNumber(double r, double im) {
real = r; imaginary = im; }
void ComplexNumber::show() { cout << real;
if (imaginary >= 0) cout << "+"; cout << imaginary << "i" << endl;
}
void ComplexNumber::add(const ComplexNumber &cn) {
real += cn.real;
imaginary += cn.imaginary;
}
double ComplexNumber::abs() {
double tmp=real*real + imaginary*imaginary;
return sqrt(tmp);
}
Дружественные функции
void add(ComplexNumber &obj1, const ComplexNumber &obj2) {
obj1.real += obj2.real; obj1.imaginary += obj2.imaginary;
}
double abs(const ComplexNumber &cn) {
double tmp = cn.real*cn.real + cn.imaginary*cn.imaginary;
return sqrt(tmp);
}
int main() {
ComplexNumber obj1(2, 7); ComplexNumber obj2(1, -5);
obj1.add(obj2);
obj1.show();
add(obj1,obj2);
obj1.show();
cout << abs(obj1) << " " << obj2.abs();
return 0;
}
