Продолжаю пробовать перегружать операторы, и вновь не могу вызвать перегрузку. Например, есть класс List:
class List
{
Node *first;
Node *end;
int *count;
public:
List()
{
first = NULL;
end = NULL;
count = new int(0);
}
~List()
{
delete count;
}
void Add(Branch *ptr)
{
if (first == NULL)
{
first = end = new Node();
first->prev = NULL;
first->item = ptr;
first->next = NULL;
}
else
{
end->next = new Node();
end = end->next;
end->item = ptr;
end->next = NULL;
}
*count = *count + 1;
}
Branch* operator[](int i)
{
if (!(i < *count))
{
return NULL;
}
Node *temp = first;
int j = 0;
while (j < i)
{
temp = temp->next;
j++;
}
return temp->item;
}
void Set(int i, Branch* ptr)
{
if (!(i < *count))
{
return;
}
Node *temp = first;
int j = 0;
while (j < i)
{
temp = temp->next;
j++;
}
temp->item = ptr;
}
void Delete(int i)
{
if (!(i < *count))
{
return;
}
Node *temp = first;
int j = 0;
while (j < i)
{
temp = temp->next;
j++;
}
if (temp == first)
{
first = first->next;
first->prev = NULL;
delete temp;
}
else if (temp == end)
{
end = end->prev;
end->next = NULL;
delete temp;
}
else
{
temp->next->prev = temp->prev;
temp->prev->next = temp->next;
delete temp;
}
count--;
}
int Count()
{
return *count;
}
};
В нём перегружен оператор =;
Если я вызываю из Main()
int main()
{
List *wow = new List;
cout << (*wow)[0]->node_to; //выведет 1;
}
Идём дальше, объявляем класс Graph
class Graph
{
public:
List *branhes;
Graph()
{
branches = new List();
}
};
В main объявляем:
int main()
{
Graph *graph = new Graph();
graph->branches[0]; //ссылается на сам список, а не на перегрузку
}
Вот в чём вопрос, как вызывать перегрузку при таком объявлении из объекта? Извиняюсь, если тупой вопрос, поиском воспользовался, может искать не умею, но ничего не нашёл.
(*graph->branches)[i]
(или graph->branches[0][i]
).
Кроме того, во-первых: Зачем вы используете указатели и new
/delete
там, где они не нужны? Раз: int *count;
count = new int(0);
. Два: List *branhes;
Graph *graph = new Graph();
Можно ведь просто сделать int count;
и List branches;
.
Во вторых: Ваш ~List()
вызывает утечку памяти. Кто будет удалять содержимое списка?
В третьих: Поскольку List
нарушает the rule of three, он совершенно не подходит для использования в настоящих программах. Он ломается даже от List a, b; a = b;
.
Когда будете приводить класс в соответствие с the rule of three, вам может пригодиться это: What is the copy-and-swap idiom?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Вызываю функцию которая рисует круги и почему то дорисовывает одну точку из центра и не как избавиться от этого "явления" не могу
Нужно получить клик только по контейнеруЕсли я произвожу клик по элементам внутри контейнера, то они тоже засчитываются
Подскажите пожалуйста как реализовать подобную структуру на django+jquery? modelspy
И как эта штука называется когда свайпается вправо каждые n секунд и можно нажимать на срелочки