Дружественные функции.


Описатель friend предоставляет обычной функции доступ к закрытым членам класса, в котором объявлен прототип такой функции. Дружественные функции позволяют:

· Перегружать некоторые операторы

· Облегчить создание функций ввода/вывода

· Обеспечить одновременный доступ к элементов разных классов (объектов)

Ограничения:

· Не наследуются производным классов

· Не могут содержать спецификатор хранения (static (локальная переменная, сохраняющая свое значение между вызовами функций) или extern(сообщает компилятору, что следующие за ним типы и имена переменных объявляются где-то в другом месте))

class b;

class a

{

int i;

public:

void setInt (int I) { i = I; }

friend bool compare( a&, b& );

};

class b

{

double d;

public:

void setDouble (double D) { d = D; }

friend bool compare( a&, b& );

};

 

bool compare (a & A , b & B)

{

if(A.i > B.d)

return true;

else return false;

}

Дружественные классы.

Описатель friend позволяет определить один класс как дружественный по отношению к другому класс, при этом дружественный класс будет иметь доступ к private членам другого класс. дружественный класс не наследует члены другого класса, поэтому данную конструкцию необходимо использовать только в особых случаях.

 

class b;

class a

{

double d;

public:

friend class b;

};

class b

{

public:

void setDouble (a & A, double D) { A.d = D; }

double getDouble (a & A) { return A.d; }

 

};

 

void main()

{

a A;

b B;

B.setDouble(A, 1.1);

cout << B.getDouble(A);

}

Указатели на объекты. Указатель this. Передача и возврат объектов с использованием указателей. Применение базовых указателей при работе с производными типами для повышающего приведения типов.

Указатели могут работать с объектами:

· Для доступа к членам класса через указатель ислозьзуется оператор “–>”

· Адресная арифметика зависит от типа указателя (при увеличении указателя на единицу он будет иметь адрес следующего элемента этого типа)

· Указателю соответствующего типа можно присвоить адрес любого public члена объекта

· Присваивать друг другу можно лишь указатели совместных типов (но это можно преодолеть используя приведение типов – нарушение принципов строгой проверки)

 

При вызове функции ей неявно передается указатель на вызывающий объект – указатель this. В основном используется при перегрузке операторов для возврата адреса текущего объекта. Указатель this не передается дружественным функциям и статическим функциям-членам класса.

 

Указатели на объекты базового типа могут ссылаться и на объекты производного типа от этого базового типа. При этом можно получить доступ только к наследуемым (базовым) членам класса. обратное утверждение не верно – указатель на производный класс не может ссылаться на базовый класс.

Особенности:

· Если указатель на базовый класс привести к типу указателя на производный класс, то откроется доступ ко всем членам производного класса

· Если указатель на базовый класс используется для доступа к производному объекту, то увеличение указателя на единицу не даст доступ к следующему объекту производного типа


Использование указателей:

 

class example

{

double d;

public:

example (double D) { d = D; }

double getDouble () { return d; }

};

 

void main()

{

example obj = 1;

example arrObj [3] = {2, 3, 4};

example *p;

p = &obj;

cout << p->getDouble() << endl;

p = arrObj;

for (int i = 0; i < 3; i++)

{

cout << p->getDouble() << endl;

p++;

}

}

 

Приведение производного класса к базовому:

class base

{

public:

int a;

};

 

class delivered : public base

{

public:

int b;

};

 

void main()

{

base *B;

delivered D;

D.a = 1;

D.b = 2;

B = &D;

cout << B->a;

}

 





Дата добавления: 2022-02-05; просмотров: 264;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.011 сек.