Aktywne Wpisy
luke-mat +423
Święta się zbliżają, a więc wożenie rodziny samochodem.
Pamiętaj, jeśli rodzina powie Ci "każdy płaci za siebie" i nie chce zapinać pasów.
Masz prawo powiedzieć: "Zapinasz pasy lub wysiadasz"
80kg Pasażer za kierowcą, bez pasów, przy stłuczce przy 50km/h uderza w fotel kierowcy z siłą 2 ton
#samochody #motoryzacja
Pamiętaj, jeśli rodzina powie Ci "każdy płaci za siebie" i nie chce zapinać pasów.
Masz prawo powiedzieć: "Zapinasz pasy lub wysiadasz"
80kg Pasażer za kierowcą, bez pasów, przy stłuczce przy 50km/h uderza w fotel kierowcy z siłą 2 ton
#samochody #motoryzacja
źródło: image
Pobierz
56632 +26
źródło: Screenshot_8
Pobierz




http://pastebin.com/ZBqFYzqC
która zawiera 3 pola: dwa wskaźniki i jednego int'a.
Normalnie można wyłuskiwać pola np. tak:
Node* node = new Node(); // Inicjalizuje pola next i previous na nullptr
node->next; // node->next == nullptr
Jeśli zaś chcę jeszcze wyłuskać coś z next'a to robię:
node->next->data; // node->next == nullptr, co daje nullptr->data
Ale tutaj jest błąd, bo node->next to wskaźnik nullptr, więc nie można z niego nic wyłuskać.
Da się tak przeciążyć operator -> (lub ewentualnie ->), że jak robię właśnie takie coś:
node->next->data; // node->next == nullptr
To sam będzie sprawdzał czy nie jest próba wyłuskania czegoś z nullptr?
Wyobrażam to sobie coś w tę stronę:
if(this == nullptr)
throw "Wyjatek";
else
return (/ odpowiednie pole */)
Problem jest w tym, że jakby Node zawierało tylko jedno pole, to można by je bezpośrednio zwracać, np.:
return data;
Da się takie coś zrobić? Jest w ogóle sens? ;d
#programowanie #cpp
operator->polega na tym, że zwracasz jakiś inny obiekt, na którym wywoływany jest ponownie.
operator->jest wywoływany tak długo, aż dojdzie do surowego pointera. Twój pomysł z rzucaniem da się zrobić, ale to bez sensu trochę, bo blokujesz tym samym możliwość podejrzenia wartości wew. pointera. Ja bym może tylko zrobił jakieś gettery/settery na pola i to wszystko, resztą powinien się użytkujący martwić.
this == nullptrjest nie do zrealizowania, bo sama dereferencja nullptr-a jest UB. Przypuszczam, że kompilator takie sprawdzenie mógłby nawet usunąć z tego powodu i przeszedłby od razu do reszty metody.
operator->dla konkretnych pól i metod.
Komentarz usunięty przez autora