Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Tworzenie obiektu klasy za pomocą konstruktora

Ostatnio zmodyfikowano 2015-04-17 15:57
Autor Wiadomość
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:
C/C++
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ę.
P-131050
akwes
» 2015-04-17 13:33:55
Poczytaj o dynamicznej alokacji, referencjach oraz wskaźnikach bo widać, że nie wiesz co robisz.

C/C++
Bazowa * o = new Pochodna();
Pochodna p = Pochodna();
Bazowa & p1 = p;
Bazowa * p2 = & p;
P-131051
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().
P-131054
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.
P-131056
Patrycjerz
Temat założony przez niniejszego użytkownika
» 2015-04-17 14:51:52
To w Wikipedii są bzdury: http://pl.wikipedia.org/wiki​/Konstruktor_%28programowanie_obiektowe%29? Jeśli tak, to skąd mam wziąć prawdziwe informacje?
P-131057
akwes
» 2015-04-17 15:03:53
» Kurs C++Konstruktor, destruktor i konstruktor kopiujący klasy lekcja
» Kurs C++Dynamiczne zarządzanie pamięcią new i delete lekcja
» KursyKurs C++ kurs

Wpis jest o programowaniu obiektowym a nie konkretnie o C++.
P-131058
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:
C/C++
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.
P-131062
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.
P-131063
« 1 » 2
  Strona 1 z 2 Następna strona