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

Klasa pochodna i zapis wskaźnika

Ostatnio zmodyfikowano 2022-02-06 21:20
Autor Wiadomość
pekfos
» 2022-02-06 18:03:42
No tak... na początku myślałem że podałeś taki kod "pokazowy" a jednak nie. Kompilator mi pluje błędami o "override" bo nie wie co to jest.
override jest w języku od 11 lat. Możesz je usunąć, te oznaczenia nie mają wpływu na działanie kodu.

Dalej nie rozumiem po co chcesz trzymać te moduły przez wskaźniki na Obiekty. W klasie "samochód" możesz mieć silnik jako "silnik", a w drzewie czwórkowym zarejestrować go jako "obiekt". Nie musisz wszędzie używać tego samego typu wskaźnika.
P-179275
Nekronomik
Temat założony przez niniejszego użytkownika
» 2022-02-06 18:10:12
Wersja 8.1.0
Błędy mam też w virtual Module1 * getModule1() { return nullptr; }
error: 'Module1' does not name a type|

"Dalej nie rozumiem po co chcesz trzymać te moduły przez wskaźniki na Obiekty"
Wszystkie obiekty tworze dynamicznie i przechowuje ich adresy w osobnym kontenerze którym zarządza sobie po swojemu Lista.
Drzewko czwórkowe zagląda do każdego kontenera i pobiera wskaźnik, potem swoim kontenerem segreguje obiekty na odpowiednich ćwiartkach.
kolizje tez są sprawdzane po przez pobieranie wskaźników, ogólnie wszystko na wskaźnikach jest i nie mogę ich mieszać ze wskaźnikami innych klass.
Obiekty które są już stworzone pobierają sobie wskaźniki innych obiektów i robią wewnątrz swoich wirtualnych metod odpowiednie obliczenia.
Czyli mam klasę abstrakcyjną w której chce mieć jak najmniej atrybutów i wskaźników no chyba że dany atrybut lub wskaźnik jest wykorzystywany przez wszystkie klasy pochodne to je zostawiam.
Oczywiście mogę stworzyć moduły(puste obiekty które czekają na wskaźnik ) w klasie abstrakcyjnej m1,m2,m3....m100... tylko że wtedy każda klasa pochodna też ma dostęp do tego po co ? Czyli np taka mina która jest klasą pochodną i ma tylko wybuchać ma do tego dostęp do tego i zadeklarowane miejsce i nie będzie tego nigdy używać.
Dlatego w klasie pochodnej tworzę wskaźnik na Obiekty. Jeśli to uda mi się normalnie przechwycić to dalsze obliczenia nie stanowią problemu.



P-179276
pekfos
» 2022-02-06 18:44:40
Wersja 8.1.0
Powinien więc znać override.

error: 'Module1' does not name a type|
Tu musisz włożyć minimum wysiłku by dostosować kod z internetu do własnego. Mamy do dyspozycji tylko luźny opis tego co chcesz osiągnąć, więc kod po skopiowaniu nie będzie się od razu wkomponowywać w to co masz już napisane.

Problem pojawił sie gdy stworzyłem obiekt modułowy który składa się z kilku obiektów . Dlatego teraz kombinuję z tym aby obiekt miał w pełni kontrolę nad modułami.
Podaj przykład, z prawdziwymi nazwami.

Dlatego w klasie pochodnej tworzę wskaźnik na Obiekty. Jeśli to uda mi się normalnie przechwycić to dalsze obliczenia nie stanowią problemu.
Zgoda że chcesz to robić w klasie pochodnej, ale to dalej nie odpowiada na pytanie czemu wskaźnik jest na Obiekty. Mowa konkretnie o wskaźniku w klasie pochodnej, nie o tym na liście wszystkich obiektów i drzewie czwórkowym. Wracając do samochodu i silnika, oba obiekty są "obiektami" i są na liście obiektów i drzewie kolizji, ale "samochód" nie ma pod maską dowolnego "obiektu", ale konkretnie "silnik".
P-179277
Nekronomik
Temat założony przez niniejszego użytkownika
» 2022-02-06 18:57:28
pekafos ja nie wykorzystuje tego kodu od razu do mojego. Pierw kod sprawdzam sobie w nowym pustym projekcie na sucho jak działa i co robi dokładnie.
Przyznam że pierwszy raz widzę taki zapis virtual Module1 * getModule1() { return nullptr; }

No ale silnik kontroluje samochód i może na niego wpływać.
P-179278
pekfos
» 2022-02-06 19:39:28
No ale silnik kontroluje samochód i może na niego wpływać.
Rozdzielasz tu byty tylko na potrzeby obliczania kolizji, czy nie? Jakieś trzeba przyjąć założenia, dlatego miałeś podać realny przykład. Cała logika samochodu może być zaimplementowana w klasie samochodu i tylko używać stanu z obiektu silnika.
P-179279
Nekronomik
Temat założony przez niniejszego użytkownika
» 2022-02-06 20:21:23
Ok, podam przykład ale na bazie moich obiektów.

Tworzę obiekt pancernik (klasa pochodna) i w nim są zawarte Puste wskaźniki na obiekty.
Więc pancernik prosi listę o dodanie nowych dwóch obiektów wieżyczki(klasa pochodna) które ich wskaźniki zostaną przypisane do tych dwóch wskaźników pancernik.
pancernik ustawi sobie odpowiednie współrzędne/kąty/i cele tych wieżyczek pod siebie w odpowiedniej metodzie.
Lista w kontenerach ma zapisane 3 obiekty, jeśli teraz dodam kolejny obiekt np statek(klasa pochodna) to w liście będą 4 obiekty dzięki temu nie mam problemu nad kontrolą kolizji i relacji między obiektami.
Jeśli statek popchnie jedna z wieżyczek pancernika która jest do niego przypisana to od razu popchnie w tym samym kierunku pancernik i druga wieżyczkę.
Jeśli pancernik zostanie zniszczony to wieżyczki też mogą zostać zniszczone lub po prostu zostaną i będą dalej kontynuować walkę z statkiem. A lista dalej widzi 3 obiekty i robi swoje.

Możliwe że logika w moim kodzie jest głupia ale jak na razie działa dobrze.
P-179280
pekfos
» 2022-02-06 21:12:36
Więc pancernik prosi listę o dodanie nowych dwóch obiektów wieżyczki(klasa pochodna) które ich wskaźniki zostaną przypisane do tych dwóch wskaźników pancernik.
Pancernik ma dostęp do swoich pól. Gdzie jest problem o którym pisałeś na początku? Ja to widzę tak
C/C++
class Turret
    : public Obiekty
{ /* ... */ };

class Battleship
    : public Obiekty
{
   
std::shared_ptr < Turret > m_turrets[ 2 ];
   
public:
   
Battleship( GameState & gameState )
   
{
       
for( int i = 0; i < 2; ++i )
       
{
           
m_turrets[ i ] = gameState.createObject < Turret >();
           
//TODO: inicjalizacja specyficzna dla i-tej wieżyczki
       
}
    }
}
;
P-179281
Nekronomik
Temat założony przez niniejszego użytkownika
» 2022-02-06 21:20:54
Napisałem to w taki sposób że dalsze dokładanie kodu spowoduje jeden wielki bałagan w kodzie (nieczytelny/nierozbudowywalny) tak jak byś cos napisał w zeszycie na marginesie aby sprawdzić czy działa. I puki co się tu zatrzymałem.
P-179282
1 2 « 3 »
Poprzednia strona Strona 3 z 3