Konstruktory i wskaźniki

2015-01-22 22:08
0

Witam mam pewien drobny problem.

Zrobiłem taką przykładową hierarchie klas:

 class A
{
    int x;
    int y;

    int* wsk;
public:
    A() { x = 0; y = 0; wsk = NULL; }
    //reszta metod
};

class B
{
    A pole;
public:
    B() { pole = A(); }
};

class C : public B
{
    B *plansza;

public:
    C(){ plansza = new B; }
};

I teraz z tego co widzę po odpaleniu tego, wartość wskaźnika z klasy bazowej jest niezainicjowana poprawnie. Czy powinienem gdzieś dodatkowo inicjować ten wskaźnik ?

używaj nullptr, a nie NULL tak tylko dodam - gośćabc 2015-01-23 01:07

Pozostało 580 znaków

2015-01-22 22:16
0

W sumie, to w klasie bazowej nie masz żadnego wskaźnika.
W czym dokładnie jest problem?

Pozostało 580 znaków

2015-01-22 22:24
0

Może źle sie wyraziłem. Chce aby ten wskaźnik w klasie bazowej przekazywał mi adres do jakiegoś miejsca w pamięci. I w momencie jak utworze sobie coś takiego:

int main()

{
   C cos;

return 0;
}

bez żadnych dodatkowych parametrów to czy do tego wskaźnika zostanie przypisane NULL czy będą tam po prostu śmieci.

Mam podobny bardziej rozbudowany program i podobnym przypadku jak chce dostać wartość tego co jest pod wskaźnikiem to wywala mi że nie jest to zainicjowane czy coś takiego. Stąd moje pytanie czy konstruktory się tutaj wywołają po kolei i robią tak jak jest napisane czy trzeba jakąś doodatkową instrukcje, bo już zgłupiałem.
BTW jeśli tutaj jest ok wszystko to bedę szukał gdzieś indziej luki jakiejś.

edytowany 2x, ostatnio: stysiu20, 2015-01-22 22:25

Pozostało 580 znaków

2015-01-22 22:31
0

Wstaw cout do konstruktorów to się dowiesz co się wywoła.

Pozostało 580 znaków

2015-01-22 22:32

A możesz powiedzieć co ty próbujesz zrobić? Bo ja widzę że dziedziczysz z klasy B i jednocześnie masz pole typu B w klasie C to zapala mi sie lampka "WTF".
Poza tym masz tu raptem 3 konstruktory i tylko jeden jest poprawny :D
pole = A(); nie ma sensu bo konstruktor nic nie zwraca. Zresztą ten obiekt utworzy sie automatycznie i nic nie musisz z nim robić skoro chcesz i tak wołać domyślny konstruktor
plansza = new B; -> plansza = new B();


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2015-01-22 22:38
0

Racja to co tam wyżej napisałem to bez sensu jest ;D Na tą chwile problem rozwiązałem. Chyba za długo przy kompie siedze i juz nie myśle ;D
Ale dzięki za pomoc i trafne uwagi :)

Jeśli wątek uważasz za zakończony - rozdaj plusiki pomocnym postom i zaznacz fajeczkę przy poście z rozwiązaniem problemu (możesz także zaakceptować swój post, jeśli zawiera rozwiązanie); - furious programming 2015-01-22 22:57

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0