Лекция: Указатель this
Конкретные переменные типа «класс» называются экземплярами класса, или объектами. Каждый объект содержит свой экземпляр полей класса. Методы класса находятся в памяти в единственном экземпляре и используются всеми объектами совместно, поэтому необходимо обеспечить работу методов с полями именно того объекта, для которого они были вызваны. Это обеспечивается передачей в функцию скрытого параметра this, в котором хранится константный указатель на вызвавший функцию объект. Указатель this неявно используется внутри метода для ссылок на элементы объекта. В явном виде этот указатель применяется в основном для возвращения из метода указателя (return this;) или ссылки (return *this;) на вызвавший объект.
ЗАДАЧА 3.1. Для иллюстрации использования указателя this добавим метод сложения в класс complex.
class complex //Определяем класс complex
{
//Закрытые поля класса и метод
double x;
double y;
void show_complex();
//Открытые методы
public:
void vvod();
complex add(complex a);
};
void complex::show_complex()
{
if (y>=0)
cout<<x<<"+"<<y<<«i»<<endl; // неявное использование указателя this
else cout<<x<<y<<«i»<<endl; // неявное использование указателя this
}
void complex::vvod()
{
cout<<«Vvedite x\t»; cin>>x; // неявное использование указателя this
cout<<«Vvedite y\t»; cin>>y; // неявное использование указателя this
}
complex complex:: add(complex a)
{
complex res;
res.x=x+a.x; // неявное использование указателя this
res.y=y+a.y; // неявное использование указателя this
return this; // явное использование указателя this
}
int main()
{
complex chislo1, chislo2;
chislo1.vvod(); chislo2.vvod();
cout<<«Summa kompleksnih chisel=»<<chislo1.add(chislo2);
return 0;
}