Лекция
Привет, сегодня поговорим про наследование включение объектов, обещаю рассказать все что знаю. Для того чтобы лучше понимать что такое наследование включение объектов , настоятельно рекомендую прочитать все из категории С++ (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)
Из статьи мы узнали кратко, но содержательно про наследование включение объектов
Комментарии
Оставить комментарий
С++ (C plus plus)
Термины: С++ (C plus plus)