Читайте также:
|
|
Как мы упоминали, можно создавать указатели на классы, используя имя класса в качестве типа, например:
CRectangle * prect;
prect есть указатель на объект класса CRectangle .
Как и для структур, чтобы сослаться на член объекта, мы используем операцию -> . Вот пример:
// pointer to classes example #include <iostream.h> class CRectangle { int width, height; public: void set_values (int, int); int area (void) {return (width * height);}}; void CRectangle::set_values (int a, int b) { width = a; height = b;}int main () { CRectangle a, *b, *c; CRectangle * d = new CRectangle[2]; b= new CRectangle; c= &a; a.set_values (1,2); b->set_values (3,4); d->set_values (5,6); d[1].set_values (7,8); cout << "a area: " << a.area() << endl; cout << "*b area: " << b->area() << endl; cout << "*c area: " << c->area() << endl; cout << "d[0] area: " << d[0].area() << endl; cout << "d[1] area: " << d[1].area() << endl; return 0;} Программа выведет: a area: 2Ниже мы приводим пояснения о том, как читать текст, использующий указатели на классы и операции ( *, &,., ->, [ ] ), которые встречаются в примере:
* x read: указанный посредством x & x read: адрес x x. y read: член y объекта x (* x). y read: член y объекта, указанного посредством x x->y read: член y объекта, указанного посредством x x[0] read: первый объект, указанный посредством x x[1] read: второй объект, указанный посредством x x[ n] read: (n+1)-й объект, указанный посредством xКоротко об указателях на компоненты класса.
Компоненты класса делятся на две группы – компоненты-данные и компоненты-функции (методы). Указатели на компоненты класса по-разному определяются для полей и методов. Определение указателя на метод имеет следующий формат:
Тип_возвр._методом_значен. (имя_класса::*имя_указателя) (спецификац._параметров);
Например, если у нас имеется такой класс complex:
#include <iostream.h>class complex {
complex(double re=1.0, double im=0.0) {real=re; imag=im;}
void display(void) {
cout<<”real=”<<real; cout<<”imag=”<<imag; }
double& re(void) {return real;}
double& im(void) {return imag;}
private:
double real;
double imag;
};
то вне класса можно следующим образом описать указатель ptCom:
double& (complex::*ptCom) ();
После этого можно обычным образом задать значение указателя:
PtCom=&complex::re; // complex::re – квалифицированное имя метода re
Теперь для любого объекта X класса complex
Complex X(10.0, 2.7); // Определение объекта
Можно след. Образом вызвать метод re():
(X.*ptCom)()=12.0; //модификация
cout<<(X.*ptCom)(); //вывод
Аналогично можно поступить и с методом im().
Формат определения указателя на поля класса:
Тип_данных (имя_класса::*имя_указателя);
В определение указателя можно включить его явную инициализацию, используя адрес компонента:
&имя_класса::имя_компонента,
при этом компонент класса должен быть открытым (если private, то получим ошибку).
Пока все, в дальнейшем – на примерах.
Дата добавления: 2015-11-16; просмотров: 45 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Перегруженные конструкторы | | | О перегрузке операций |