C++ допускает функции-члены static и const. Их реализацию можно понять в терминах доступа через указатель this. Обычная функция-член вызывается как
object.mem ( i, j, k) ;
Она имеет явный список параметров i, j, k и неявный список параметров, который состоит из членов object. Неявные параметры можно представить как список параметров, доступных через указатель this. Напротив, статическая (static) функция-член не может обращаться к любому из членов, используя указатель this. Функция-член const не может изменять неявные параметры. Следующий пример иллюстрирует эти различия:
//вычисление жалованья с использованием
//функций-членов static и const
«include
class salary
{
int b_sal;
int your bonus;
static int all_bonus; //объявление public:
initfint b) { b_sal = b; }
void calc_bonus(double perc){your_bonus=b_sal*perc;}
static void reset_all(int p){all_bonus=p;}
int comp tot() const
{ return (b_sal + your_bonus + all_bonus) ;
};
int salary::all_bonus = 100; //объявление
main()
{
salary wl, w2;
wl.init(lOOO) ;
w2.init(2000) ;
wl.calc bonus(0.2);
w2.calc_bonus(0.15) ;
salary::reset_all(400);
cout<<"wl "<
Указатели на членов
Указатели на членов указывают на нестатические поля или методы (включая виртуальные) любого объекта класса (Указатели на статические поля - это обычные указатели).
struct Point
{int x, у;
void Set( int X, int Y) { x = X, у = Y; }
static int Z;
};
int Point::Z=0;
int *pZ=&Point::Z;
Pointa а, *ра = &а;
// pint - это указатель на любой int член класса Point
int Polnt::*pint = &Point::x; // В этом случае х
pmf2i - это указатель на любую функцию-член класса Point,
принимающую два аргумента типа int и возвращающую void
void (S::*pmf2i) (int, int) = &S::Set;
++( a.*pint); // Инкремент x
++( pa->*pint); // Снова инкремент х
(*pZ)++; // Инкремент Z
(a.*pmf2i)(1,1); // Вызов SetO
( pa->*pmf2i) ( 2, 2 ); // Вызов Set () через pa
• Неявно преобразуются в указатели на членов производных классов, если это необходимо (см. "Указатели" в разделе "Производные классы").
• Не преобразуются неявно в указатели на void, как обычные указатели.
Похожие записи
No user прокомментировали сообщение
Оставить комментарий