michal11 |
» 2016-04-27 18:26:02 W klasie A nie ustawiasz wskaźnika bobject więc w funkcji test2 jest wywoływana funkcja na rzecz nieistniejącego obiektu. Swoją droga dziwne, że w debug działa, na pewno to jest cały kod ? co się wyświetla ? Jaki błąd dostajesz w release ? |
|
alien1983 Temat założony przez niniejszego użytkownika |
» 2016-04-27 18:53:40 nazwa sygnału: SIGSEGV znaczenie sygnału: Segmentation fault
0x401fce 8b 4e 08 mov 0x8(%esi),%ecx
Jak zrobić stabilne te obiekty? aby można było się do nich odwołać?
Jeżeli zamiast
C * cobject; użyje C cobject;
to się borykam
z poniższymi błędami dla klas c.h:6: błąd: expected class-name before '{' token { ^ |
|
michal11 |
» 2016-04-27 19:58:33 Bo próbujesz zrobić jakąś dziwną konstrukcję z klasą bazowa zawierającą klasy dziedziczące, po co ci w ogóle coś takiego ? |
|
alien1983 Temat założony przez niniejszego użytkownika |
» 2016-04-27 20:30:02 tak mi doradzili aby zrobić dziedziczenie klas...
klasa A czyli rdzeń (główna klasa przetwarzająca, inicjująca to co dzieje się w programie) klasa B np. obsługuje połączenia websocket klasa C obsługuje bazę danych klasa D obsługuje terminal , wyświetla informacje z aplikacji (ile połączeń do bazy, użytkowników, obciążenie serwera itp.)
klasa A potrzebuje komunikować się ze wszystkimi klasami. klasa B potrzebuje komunikować się z klasa C i D klasa C z klasą D
itp. a potem przejdę do wątków i połączenia wielowątkowych połączeń z serwerem i komunikacji z np. jednowątkową obsługą terminala ...
|
|
michal11 |
» 2016-04-27 21:36:10 Nie wiem dlaczego niby klasa obsługująca terminal miałaby dziedziczyć z klasy rdzenia (czyli miałaby zachodzić relacja IS-A). Do tego co napisałeś wystarczy zwykła zawieranie (components), zdecydowanie nie nadaje się do tego dziedziczenie (nawet nie wiem jak by taka hierarchia miała wyglądać, co miało by być dziedziczone). |
|
mateczek |
» 2016-04-27 21:45:49 jeśli już to chyba w druga stronę od obiektu mniej szczegółowego do obiektu bardziej rozbudowanego :P Jak dziedziczysz to nie potrzebujesz składowych obiektów Bo jeśli klasa B z dziedziczy po A to już ma wszystkie składniki klasy A :P
trzy klasy: zwierze, ptak, pies.
ptak dziedzyczy po zwierze. pies dziedziczy po zwierze.
ale pies po ptak już średnio :) bo gdyby tak było to pies by latał bez kopnięcia w dupę :P a to trochę średnio |
|
alien1983 Temat założony przez niniejszego użytkownika |
» 2016-04-27 22:09:59 Ok.
Mogę zawsze nie dziedziczyć i tworzyć dla np. klasy Terminal (co używa klasy qDebug) w każdej swojej klasie stworzyć nowy obiekt terminal objektTerminal, tak to mogę to używać. Ale dla wyświetlania napisów na jednym ekranie tworze tyle obiektów(instancji)ile jest klas chcących coś zakomunikować.
Pytanie? To jak zrobić tak jak jest w QT >> qDebug() , że nie muszę za każdym razem tworzyć obiektu w każdej klasie qDebug aby użyć metody qDebug() ? tylko dodaje nagłówek klasy i tyle?
Moje podejście jest trochę z Delphi a C++ mamy klasy.
Główna procedura(zbiór funkcji inicjujących sterujących itp. programem)
>> (podprogram realizujący) - połączenia websocket (podprogram realizujący) - połączenia sql (podprogram realizujący) - połączenia terminal (podprogram realizujący) - cokolwiek innego
? |
|
mateczek |
» 2016-04-28 00:08:14 Moje podejście jest trochę z Delphi a C++ mamy klasy.
|
akurat tutaj to delphi się bardzo od c++ nie różni. W Delphi też są obiekty i klasy. A, że pisząc program pewnie używałeś jednej (klasa okna głównego), której składnikami były przyciski, labelki itp. to już inna rzecz :P unit Unit1;
interface
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
type TForm1 = class( TForm ) Edit2 : TEdit; Button1: TButton; Label1: TLabel; Label2: TLabel; Edit1: TEdit; Label3: TLabel; procedure Button1Click( Sender: TObject ); function F( n: integer ) : integer; private
private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{ $ R *.dfm }
function TForm1.F( n: integer ) : integer; begin if n = 1 then begin F:= 1; exit end; if n = 2 then begin F:= 1; exit end; F:= F( n - 2 ) + F( n - 1 ) end;
procedure TForm1.Button1Click( Sender: TObject ); var n: integer; begin n:= strtoint( edit1.Text ); edit2.Text:= inttostr( F( n ) ) end;
end.
Do dziedziczenia widać jeszcze w Delphi nie doszedłeś. Ale działa tak samo jak w C++ Oczywiście są różnice między tymi językami: C++ mamy szablony w delphi nie c++11 daje duże udogodnienia (fajne pętle, auto, wyrażenia lambda) c++ ma wiele bibliotek z których korzystanie jest wygodniejsze (boost, stl, qt) Ale sama obiektowość delphi c++ to prawie to samo. Z ciekawostek biblioteka VCL używana między innymi w C++ builder jest napisana w pascalu (delphi) A projekt delphi na linuxa (kylix) korzystał z biblioteki QT reasumując. Możesz pisać program tak samo jak to robiłeś w Delphi i będzie dobrze !!! |
|
1 « 2 » 3 |