Имеется некоторый исходный код, который был написан преподом, и в нем необходимо разобраться. Пытаясь сделать это, наткнулся на некоторые трудности. Собственно, вопросы для решения этих трудностей:
Имеется такая реализация конструктора класса.
cl_base::cl_base(cl_base * p_parent)
{
set_object_name("cl_base");
if (p_parent) {
this->p_parent = p_parent;
p_parent->add_child(this);
}
else {
this->p_parent = 0;
}
}
Также имеется реализация метода add_child:
void cl_base::add_child(cl_base * p_child)
{
children.push_back(p_child);
}
Что выполняет строка p_parent -> add_child(this)
? Что именно передается при использовании this
в качестве формального параметра для метода add_child
, и какой следует результат из передачи в метод именно this
?
Имеется следующий код:
vector < cl_base * > children;
vector < cl_base * > ::iterator it_child;
Для чего в качестве типа вектора используется указатель на cl_base, и почему этот самый указатель никак не назван? Для выполнения каких задач нам необходимо использовать тип данных, который представлен, как указатель на другой тип данных?
Очень буду рад развернутым ответам с примерами. Заранее благодарю!
Собственно:
1) Нет, главное чтобы они были в определении класса, но порядок не важен.
2) this
- это указатель на используемый объект класса. Т.е, когда у вас есть объект node
и вы от его имени вызываете какой-то метод, который должен возвратить указатель на этот самый объект, то он возвратит именно this
. Также если вам нужен не указатель, а сам объект (или ссылка на его), то можно просто его разыменовать *this
. В вашем же коде строка:
p_parent->add_child(this);
обращается к переданному объекту (точнее указателю на него), и применяет к нему метод add_child()
. Собственно, как я понимаю, это у вас список, так что можно сказать, что этот код устанавливает связи между двумя нодами: одна становится родителем, другая потомком.
3) ну это не совсем корректный вопрос. На то могут быть тысячи причин. Но, я думаю, в вашем случае это делается потому, что сами ноды хранятся в другом месте в виде списка, и чтобы не хранить копии их значений в массиве, используются именно указатели на них.
4) Тут я вообще не понял о чем вы. Когда у вас в аргументе функции указатель, то это означает, что вы должны передавать туда адрес соответствующего объекта.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Задание: Описать производный класс, дополнительно содержащий методы: умножения вектора на число, сложения двух векторов, вычитания двух...
Как сделать так, чтобы в QLineEdit автоматически (без нажатия клавиш влево-вправо) отображалась каретка?
Деление целого на целое в С++ дает целое число, замените 1 на 10