Наследование 2.5. Включение объектов

Лекция



Привет, сегодня поговорим про наследование включение объектов, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое наследование включение объектов , настоятельно рекомендую прочитать все из категории С++ (C plus plus).

 Есть два варианта  включения объекта типа X в класс A ;

1)Объявить в классе А член типа Х;

class A{
X x;
//...
};

2)Объявить в классе А член типа X* или X&.

class A{
X* p;
X& r;
};

     Предпочтительно включать собственно объект как в первом случае. Это эффективнее и меньше подвержено ошибкам, так как связь между содержащимся и содержащим объектами описывается правилами конструирования и уничтожения.

Например,

// Персона
class person{
char* name:
public:
person(char*);
//...
};
//Школа
class school{
person head; //директор
public:
school(char* name):head(name){}
//...
};

     Второй вариант с указателем можно применять тогда, когда за время жизни ”содержащего” объекта нужно изменить указатель на  “содержащийся” объект.

Например,

class school{
person* head; //директор
public:
school(char* name):head(new person(name)){}
~school{delete head;}
person* change(char * newname){
person* temp=head;
head=new person(newname);
return temp;}
//...
};

     Второй вариант можно использовать, когда требуется задавать “содержащийся” объект в качестве аргумента.

Например,

class school{
person* head;  //директор
public:
school(person* q):head(q){} 
//...
};

     Имея объекты, включающие другие объекты, мы создаем иерархию объектов. Об этом говорит сайт https://intellect.icu . Она является альтернативой и дополнением к иерархии классов. А как быть в том случае, когда количество включаемых объектов заранее неизвестно и(или) может  изменяться за время жизни ”содержащего” объекта. Например, если объект school содержит учеников, то их количество может меняться.

Существует два способа решения этой проблемы. Первый состоит в том, что организуется связанный список включенных объектов, а “содержащий” объект имеет член-указатель на начало этого списка.

Например,

class person{
char* name;
person* next;
...
};
class school{
person* head;     // указатель на директора школы 
person* begin;     // указатель на начало списка учеников 
public:
shool(char* name):head(new person(name)),begin(NULL){}
~shool();
void add(person* ob);
//...
};

     В этом случае при создании объекта school создается пустой список включенных объектов. Для включения объекта вызывается метод add(), которому в качестве параметра передается указатель на включаемый объект. Деструктор последовательно удаляет все включенные объекты. Объект person содержит поле next, которое позволяет связать объекты в список. Законченная программа, демонстрирующая этот способ включения приведена в примере 2.4.2.

Второй способ заключается в использовании специального объекта-контейнера.

Контейнерный класс предназначен для хранения объектов и представляет удобные простые и удобные способы доступа к ним.

class school{
person* head;
container pupil;
...
};

     Здесь pupil- контейнер, содержащий учеников. Все, что необходимо для добавления, удаления, просмотра и т.д. включенных объектов, должно содержаться в методах класса container. Примером могут служить контейнеры стандартной библиотеки шаблонов(STL) С++.

Рассмотрим отношения между наследованием и включением.

В общем, мой друг ты одолел чтение этой статьи об наследование включение объектов. Работы впереди у тебя будет много. Смело пиши комментарии, развивайся и счастье окажется в твоих руках. Надеюсь, что теперь ты понял что такое наследование включение объектов и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории С++ (C plus plus)

Из статьи мы узнали кратко, но содержательно про наследование включение объектов
создано: 2015-12-20
обновлено: 2021-03-13
132373



Рейтиг 9 of 10. count vote: 2
Вы довольны ?:
Поделиться:

Найди готовое или заработай

С нашими удобными сервисами без комиссии*

Как это работает? | Узнать цену?

Найти исполнителя
$0 / весь год.
  • У вас есть задание, но нет времени его делать
  • Вы хотите найти профессионала для выплнения задания
  • Возможно примерение функции гаранта на сделку
  • Приорететная поддержка
  • идеально подходит для студентов, у которых нет времени для решения заданий
Готовое решение
$0 / весь год.
  • Вы можите продать(исполнителем) или купить(заказчиком) готовое решение
  • Вам предоставят готовое решение
  • Будет предоставлено в минимальные сроки т.к. задание уже готовое
  • Вы получите базовую гарантию 8 дней
  • Вы можете заработать на материалах
  • подходит как для студентов так и для преподавателей
Я исполнитель
$0 / весь год.
  • Вы профессионал своего дела
  • У вас есть опыт и желание зарабатывать
  • Вы хотите помочь в решении задач или написании работ
  • Возможно примерение функции гаранта на сделку
  • подходит для опытных студентов так и для преподавателей



Комментарии


Оставить комментарий
Если у вас есть какое-либо предложение, идея, благодарность или комментарий, не стесняйтесь писать. Мы очень ценим отзывы и рады услышать ваше мнение.
To reply

С++ (C plus plus)

Термины: С++ (C plus plus)