Thread View: pl.comp.lang.c
6 messages
6 total messages
Started by =?UTF-8?Q?Piotr_
Fri, 28 Jul 2023 14:58
Inicjowanie tablicy klas
Author: =?UTF-8?Q?Piotr_
Date: Fri, 28 Jul 2023 14:58
Date: Fri, 28 Jul 2023 14:58
38 lines
1177 bytes
1177 bytes
Jak jest klasa bez domyślnego konstruktora: class Ala { int A; public: Ala(int a):A(a){} }; to tablicę takich klas mogę zainicjować: Ala Tab[2]={Ala(1),Ala(2)}; Ale nie wiem jak zainicjować taką tablicę w konstruktorze kolejnej klasy. Chodziło by o coś w stylu: class Tablica { Ala T[2]; public: Tablica():T({Ala(1),Ala(2)}){} // --- to nie przechodzi }; Próbowałem trochę poszukać w necie ale na hasło o inicjalizacji tablic klas znajduję tylko przykłady jak moje Tab[], które działa. Potrzebuję użyć klasy Ala w kilku różnych klasach, ale tylko w jednej będzie tabela. Czyli mogę dołożyć default konstruktor z danymi jak do tej jednej klasy i dopóki nie będę potrzebował drugiej klasy z tabelką to 'temat załatwiony'. Ale, choć zapewne nigdy mi to nie będzie potrzebne (nie jestem programistą) to z czystej ciekawości chciałbym wiedzieć jak zainicjować tabelę elementów klasy nie posiadającej default konstruktora w konstruktorze klasy zawierającej tę tabelę. Widziałem jakieś info, które może sugerować, że w C++ 11 coś w tej kwestii mogło się zmienić. Mój kompilator jest starszy. P.G.
Re: Inicjowanie tablicy klas
Author: =?UTF-8?Q?Piotr_
Date: Fri, 28 Jul 2023 15:16
Date: Fri, 28 Jul 2023 15:16
49 lines
1863 bytes
1863 bytes
W dniu 2023-07-28 o 14:58, Piotr Gałka pisze: > Jak jest klasa bez domyślnego konstruktora: > > class Ala > { > int A; > public: > Ala(int a):A(a){} > }; > > to tablicę takich klas mogę zainicjować: > > Ala Tab[2]={Ala(1),Ala(2)}; > > Ale nie wiem jak zainicjować taką tablicę w konstruktorze kolejnej > klasy. Chodziło by o coś w stylu: > > class Tablica > { > Ala T[2]; > public: > Tablica():T({Ala(1),Ala(2)}){} // --- to nie przechodzi > }; > > Próbowałem trochę poszukać w necie ale na hasło o inicjalizacji tablic > klas znajduję tylko przykłady jak moje Tab[], które działa. > > Potrzebuję użyć klasy Ala w kilku różnych klasach, ale tylko w jednej > będzie tabela. Czyli mogę dołożyć default konstruktor z danymi jak do > tej jednej klasy i dopóki nie będę potrzebował drugiej klasy z tabelką > to 'temat załatwiony'. > > Ale, choć zapewne nigdy mi to nie będzie potrzebne (nie jestem > programistą) to z czystej ciekawości chciałbym wiedzieć jak zainicjować > tabelę elementów klasy nie posiadającej default konstruktora w > konstruktorze klasy zawierającej tę tabelę. > > Widziałem jakieś info, które może sugerować, że w C++ 11 coś w tej > kwestii mogło się zmienić. Mój kompilator jest starszy. Bez zająknięcia prześliznąłem się nad tym, że to co napisałem o dołożeniu default konstruktora jest możliwe bo wszystkie obiekty w tabelce chcę tak samo inicjować (ale inaczej niż w innych klasach). Czyli, jeśli nie za bardzo by mi pasowało dodawanie z tego powodu defaultowego konstruktora (że gdzieś, kiedyś mogę zapomnieć i się zainicjuje zamiast zasygnalizować, że zapomniałem) to nie powinienem mieć nic przeciwko zrobieniu defaultowo konstruowanej pochodnej klasy Ala po to tylko aby ją użyć do tej tabelki. P.G.
Re: Inicjowanie tablicy klas
Author: JDX
Date: Sat, 29 Jul 2023 10:59
Date: Sat, 29 Jul 2023 10:59
16 lines
705 bytes
705 bytes
On 28.07.2023 14:58, Piotr Gałka wrote: [...] > Ale nie wiem jak zainicjować taką tablicę w konstruktorze kolejnej > klasy. Chodziło by o coś w stylu: > > class Tablica > { > Ala T[2]; > public: > Tablica():T({Ala(1),Ala(2)}){} // --- to nie przechodzi > }; Odpowiedź masz np. tutaj: https://stackoverflow.com/questions/11837078/initialize-a-constant-sized-array-in-an-initializer-list, hint: nawiasy klamrowe zamiast zwykłych. W każdym razie tak czy siak musisz wywalić ten zabytkowy kompilator, którego używasz tam, gdzie jego miejsce, czyli na śmietnik. Na pewno znajdzie się coś bardziej współczesnego. W końcu standard C++ 11 jest już na rynku od dosyć dawna.
Re: Inicjowanie tablicy klas
Author: =?UTF-8?Q?Piotr_
Date: Tue, 01 Aug 2023 15:39
Date: Tue, 01 Aug 2023 15:39
62 lines
2777 bytes
2777 bytes
W dniu 2023-07-29 o 10:59, JDX pisze: > On 28.07.2023 14:58, Piotr Gałka wrote: > [...] >> Ale nie wiem jak zainicjować taką tablicę w konstruktorze kolejnej >> klasy. Chodziło by o coś w stylu: >> >> class Tablica >> { >> Ala T[2]; >> public: >> Tablica():T({Ala(1),Ala(2)}){} // --- to nie przechodzi >> }; > Odpowiedź masz np. tutaj: > https://stackoverflow.com/questions/11837078/initialize-a-constant-sized-array-in-an-initializer-list, hint: nawiasy klamrowe zamiast zwykłych. Tablica int to jednak coś nieco innego niż tablica klas. Da się inicjować bezpośrednio liczbami, a tu trzeba jakoś zamienić te liczby na obiekty klasy. Żaden z wariantów: Tablica():T({Ala(1),Ala(2)}){} // to był mój oryginalny strzał Tablica():T{{Ala(1),Ala(2)}}{} Tablica():T({Ala{1},Ala{2}}){} Tablica():T{{Ala{1},Ala{2}}){} nie przechodzi. > W każdym razie tak czy siak musisz wywalić ten zabytkowy kompilator, którego używasz tam, gdzie jego miejsce, czyli na śmietnik. Na pewno znajdzie się coś bardziej współczesnego. W końcu standard C++ 11 jest już na rynku od dosyć dawna. Większość programów (niektóre względnie często modyfikuję) mam napisane pod Builderem 5. Kilka mam pod Builderem 2010. Te próby z tą klasą robię pod Builderem 2010. Właśnie zrezygnowałem z wkładania do klasy Ala referencji do innej klasy bo wtedy default konstruktor nie miałby jak jej zainicjować - będę podawał referencje jako parametr niektórych funkcji klasy Ala. Nie przerzuciłem się ze wszystkim na Buildera 2010 bo się okazało, że pod Win7 on pozwalał się tylko raz uruchomić, a ja mam odruch zamykania programów gdy uruchamiam inne i musiałbym co chwilę komputer resetować. Od roku mam Win10 pod którym Builder 2010 daje się uruchamiać wiele razy. Zainstalowałem go, zarejestrowałem i sprawdziłem, że działa i odłączyłem się od sieci. Minęło z pół roku i chciałem go użyć, a on, że coś się nie zgadza i muszę się ponownie zarejestrować. Wyczyściłem komputer ze wszystkiego co ważne i połączyłem się do sieci aby znów się zarejestrować. Zaraz się odłączyłem. Od tamtej pory na razie kompilator działa :) Nie znam innych kompilatorów. Podobno musiałbym od nowa się uczyć jak sobie budować interface użytkownika - nie mam na to czasu. Dla moich sporadycznych potrzeb szkoda wywalać kasę na nowszą wersję. Ja piszę tylko programiki do rozwiązania jakichś naszych potrzeb wewnętrznych - produkcja, testowanie, konfiguracja, wrzucenie upgrade'u do urządzenia. Właśnie wróciłem do programu napisanego w 2014 aby się zorientować, że jakiś idiota (czyli ja) pisał komentarze tak, że wydawało mu się, że wyjaśniają o co biega. P.G.
Re: Inicjowanie tablicy klas
Author: JDX
Date: Tue, 01 Aug 2023 21:06
Date: Tue, 01 Aug 2023 21:06
31 lines
1686 bytes
1686 bytes
On 01.08.2023 15:39, Piotr Gałka wrote: [...] > Żaden z wariantów: > Tablica():T({Ala(1),Ala(2)}){} // to był mój oryginalny strzał > Tablica():T{{Ala(1),Ala(2)}}{} > Tablica():T({Ala{1},Ala{2}}){} > Tablica():T{{Ala{1},Ala{2}}){} > nie przechodzi. Ten wariant przejdzie (we w miarę współczesnym kompilatorze): Tablica():T{Ala(1),Ala(2)}{} > Nie znam innych kompilatorów. Podobno musiałbym od nowa się uczyć jak > sobie budować interface użytkownika - nie mam na to czasu. > Dla moich sporadycznych potrzeb szkoda wywalać kasę na nowszą wersję. > Ja piszę tylko programiki do rozwiązania jakichś naszych potrzeb > wewnętrznych - produkcja, testowanie, konfiguracja, wrzucenie upgrade'u > do urządzenia.Przede wszystkim Builder to nie jest kompilator tylko IDE, w skład którego wchodzi m.in. kompilator. Jeśli chodzi o (gołe) kompilatory pod Windows to masz bardzo dobre, współczesne i na dodatek bezpłatne gcc (w połączeniu z MSYS2) oraz clang. Jako coś w stylu IDE można użyć np. Eclipse CDT czy ostatnio bardzo popularnego i również bezpłatnego Visual Studio Code (ale nie są to jedyne opcje). W wersji trochę bardziej hardkorowej można używać Nptepad++ i zwykłego make bądź, nawet lepiej, CMake. A do programowania/budowania GUI masz np. QTCreatora (Qt jako biblioteka do GUI) czy wxFormBuildera (wxWidgets jako biblioteka do GUI). W każdym razie jest z czego wybierać i będą to rozwiązania nie gorsze od typowych IDE jak Builder czy Visual Studio. BTW. A w bonusie masz łatwą możliwość przeniesienia oprogramowania na Linuksa czy Maca, w tym przeniesienia GUI, jeśli do GUI używasz wxWidgets bądź Qt.
Re: Inicjowanie tablicy klas
Author: =?UTF-8?Q?Piotr_
Date: Wed, 02 Aug 2023 21:06
Date: Wed, 02 Aug 2023 21:06
21 lines
784 bytes
784 bytes
W dniu 2023-08-01 o 21:06, JDX pisze: > On 01.08.2023 15:39, Piotr Gałka wrote: > [...] >> Żaden z wariantów: >> Tablica():T({Ala(1),Ala(2)}){} // to był mój oryginalny strzał >> Tablica():T{{Ala(1),Ala(2)}}{} >> Tablica():T({Ala{1},Ala{2}}){} >> Tablica():T{{Ala{1},Ala{2}}){} >> nie przechodzi. > Ten wariant przejdzie (we w miarę współczesnym kompilatorze): > Tablica():T{Ala(1),Ala(2)}{} Czyli tak jak mi się wydawało, że to powinno być zapisane. > W każdym razie jest z czego wybierać Dzięki za informacje. Zanotuję sobie wszystkie nazwy jakie podałeś. Posiadanie nowego kompilatora nie jest dla mnie krytyczne. Skoro dotychczas nie miałem potrzeby skorzystania z nowych konstrukcji C++11 to znaczy, że dalej sobie bez nich też jakoś poradzę. P.G.
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads