Wpis z mikrobloga

#pytanie #cpp #programowanie

1. Czy jak zrobie taką sytuację:

np:
B - klasa bazowa
D : B - klasa pochodna

B* p;

*p = D(paramtery konstruktora...);

to obiekt utworzy mi się na stercie i muszę w takim wypadku pamiętać o delete?
i czy utworzy mi się normalny pełnoprawny obiekt klasy D (jedynie dostęp będę miał ograniczony przez pryzmat wskaźnika jako do klasy B) ?

2. Jak mogę bezpośrednio stworzyć obiekt klasy pochodnej i przypisać go do wskaźnika klasy bazowej tak jak powyżej ale w przypadku gdy mam vektor wskaźników? np (oznaczenia B i D jak powyżej):

vector v;

v.push_back( D(paramtery konstruktora...) ?co jeszcze? );
  • 32
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@PanCogito: powiem to tak, lokalnie nigdy nie będziesz potrzebował wskaźników. Jeśli będziesz potrzebował działać na polimorfiźmie to utwórz funkcję która będzie coś robiła, i przekazuj do niej w parametrze wskaźnik.
  • Odpowiedz
@PanCogito: W tym momencie masz najprawdopodobniej zły design (ale niekoniecznie, np. mam w projekcie klasę MessageBase, która jest podstawą wszystkich wiadomości międzymodułowych, jeśli interesuje mnie tylko header wiadomości to mogę bezpiecznie tylko ją skopiować), ale od strony języka jest to w pełni zdefiniowane zachowanie.
  • Odpowiedz
@psychob: a jeszcze pytanie do tego

powiem to tak, lokalnie nigdy nie będziesz potrzebował wskaźników. Jeśli będziesz potrzebował działać na polimorfiźmie to utwórz funkcję która będzie coś robiła, i przekazuj do niej w parametrze wskaźnik.


Co w przypadku gdy w jakimś obiekcie inicjalizuje inne obiekty ale działam na interfejsach a nie konkretnych implementacjach? Wtedy potrzebuje wskaźników.
  • Odpowiedz
@PanCogito: nie potrzebujesz, jeśli zmienna żyje tylko przez czas trwania funkcji to możesz operować na implementacji (która implementuje dany interfejs) - możesz oczywiście utworzyć wskaźnik który będzie wskazywał na obiekt lokalny ale po co?

Jeśli zmienna musi żyć dłużej niż funkcja to wtedy korzystasz z ‘uniqueptr‘ albo sharedptr.

Z interfejsów korzystasz wtedy gdy jakaś funkcja ich wymaga w parametrze lub zwraca wskaźnik na interfejs.
  • Odpowiedz