Wpisy otagowane common error
Z C++ zagadka nr 4
lip 25th
Mając przedstawioną poniżej strukturę danych i kontener zawierający wskaźniki, wykonać operację/metodę methodA na rzecz obiektu obj_ posługując się iteratorem:
class Foo {
public:
methodA() {
printf("Wykonano...\n");
}
}
struct data_t {
int i_;
Foo* obj_;
}
std::list<data_t*> data_;
for(std::list<data_t*>::iterator i = data_.begin(); i != data_.end(); i++ ) {
// operacje
}
W jaki sposób wykonać blok operacji ? Możliwości mamy kilka:
/* 1 */ i->obj_->methodA(); /* 2 */ *i->obj_->methodA(); /* 3 */ (*i)->obj_->methodA();
Rozwiązanie zagadki jest proste, ale wymaga znajomości priorytetów operatorów. Pierwsze wywołania jest całkowicie błędne, ponieważ lista przecowuje wskaźniki do strkutury, a nie samą strukturę. Zatem należy najpier wyłuskać strukturę znajdującą się pod wskazywanym adresem i dopiero wtedy wykonać metodę. Okazuje się że rowiązania 2 również jest nie poprawne, właśnie ze względu na priorytety operatorów. Dopiero numer 3 daje zamierzony efekt. Na szczęście błąd ujawnia się na etapie kompilacji…
Pass-By-Value w Javie
mar 2nd
Mimo że Java jest uznawana za uproszczoną i okrojoną wersję C++ to są w niej kruczki których bez koniecznej wiedzy rozwiązać się nie da. Sposób przekazywania argumentów do metod jest szczególnie kłopotliwy dla początkujących w Javie. Ja mimo że sądziłem że trochę się z językiem już zaznajomiłem, brzydko mówiąc „naciąłem” się na teście sprawdzającym wiedzę z zakresu podstaw OO właśnie na pytaniu z przekazywaniem parametrów.
Kod wyglądał tak: Więcej >