Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Указатели на классы

Читайте также:
  1. Ii) Указатели на элементы массива
  2. VIII–IX классы
  3. Абстрактные базовые классы и чисто виртуальные функции
  4. Абстрактные базовые классы и чисто виртуальные функции.
  5. В рамках фестиваля пройдут многочисленные мастер-классы и пленэры для детей и педагогов.
  6. В рамках Чемпионата организованы курсы преподавателей ДМФ ИВ и мастер-классы приглашенных гостей.
  7. В рамках Чемпионата организованы курсы преподавателей ДМФ ИВ и мастер-классы.

Как мы упоминали, можно создавать указатели на классы, используя имя класса в качестве типа, например:

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
*b area: 12
*c area: 2
d[0] area: 30
d[1] area: 56

Ниже мы приводим пояснения о том, как читать текст, использующий указатели на классы и операции ( *, &,., ->, [ ] ), которые встречаются в примере:

* 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 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Перегруженные конструкторы| О перегрузке операций

mybiblioteka.su - 2015-2024 год. (0.006 сек.)