Tworzenie obiektu klasy za pomocą konstruktora
Ostatnio zmodyfikowano 2015-04-17 15:57
Patrycjerz Temat założony przez niniejszego użytkownika |
Tworzenie obiektu klasy za pomocą konstruktora » 2015-04-17 13:24:23 Witam, mam problem z przypisaniem adresu obiektu klasy pochodnej do wskaźnika klasy bazowej. Jeśli mam taki kod: class Bazowa { };
class Pochodna : public Bazowa { };
int main() { Bazowa * b; b = & Pochodna(); return 0; }
to w logu wypisuje mi błąd: error: taking address of temporary [-fpermissive] Dlaczego tak jest? Jeśli stworzę obiekt klasy pochodnej normalnie, a potem dopiero przypiszę jego adres do wskaźnika, to wszystko działa. Za pomoc z góry dziękuję. |
|
akwes |
» 2015-04-17 13:33:55 Poczytaj o dynamicznej alokacji, referencjach oraz wskaźnikach bo widać, że nie wiesz co robisz. Bazowa * o = new Pochodna(); Pochodna p = Pochodna(); Bazowa & p1 = p; Bazowa * p2 = & p;
|
|
Patrycjerz Temat założony przez niniejszego użytkownika |
» 2015-04-17 14:23:13 Dzięki. Po prostu w pełni nie wiedziałem, co robi konstruktor. Myślałem, że jest on zamiennikiem normalnego stworzenia obiektu, ale on tylko m.in. alokuje pamięć, więc to, co napisałem, jest bez sensu :) Będę używał new Pochodna(). |
|
akwes |
» 2015-04-17 14:32:55 Konstruktor nie alokuje pamięci... Tak jak mówiłem, poczytaj kurs zanim się weźmiesz dalej za kodzenie. |
|
Patrycjerz Temat założony przez niniejszego użytkownika |
» 2015-04-17 14:51:52 |
|
akwes |
» 2015-04-17 15:03:53 |
|
Patrycjerz Temat założony przez niniejszego użytkownika |
» 2015-04-17 15:19:49 Dzięki za materiały, ale się już z nimi zaznajomiłem. W lekcji o dynamicznym zarządzaniu pamięci była taka składnia przy korzystaniu z new: wskaznik1 = new typ_zmiennej; wskaznik2 = new typ_zmiennej[ ilosc_elementow_danego_typu ]; więc moje pytanie. Na jakiej zasadzie działa to: wskaznik = new Pochodna(); Przecież Pochodna() jest konstruktorem, a nie typem. Może z tego powodu nie rozumiem tego w pełni. |
|
Monika90 |
» 2015-04-17 15:29:23 new Pochodna; i new Pochodna(); mają to samo znaczenie. W przypadku gdy chcesz wywołać konstruktor z argumentami to podajesz je w tych nawiasach. |
|
« 1 » 2 |