Konstruktory i wskaźniki

Konstruktory i wskaźniki
S2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 33
0

Witam mam pewien drobny problem.

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

Kopiuj
 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 ?

B8
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 29
0

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

S2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 33
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:

Kopiuj
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ś.

twonek
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2500
0

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

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
1

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();

S2
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 33
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 :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.