Před 25 lety, ve čtvrtek 29. dubna 1999, byla spuštěna služba "Úschovna".
Byla vydána nová verze 24.04.28 s kódovým názvem Time After Time svobodného multiplatformního video editoru Shotcut (Wikipedie) a nová verze 7.24.0 souvisejícího frameworku MLT Multimedia Framework. Nejnovější Shotcut je vedle zdrojových kódů k dispozici také ve formátech AppImage, Flatpak a Snap.
Byla vydána verze 5.30 dnes již open source operačního systému RISC OS (Wikipedie).
V aktuálním příspěvku na blogu počítačové hry Factorio (Wikipedie) se vývojář s přezývkou raiguard rozepsal o podpoře Linuxu. Rozebírá problémy a výzvy jako přechod linuxových distribucí z X11 na Wayland, dekorace oken na straně klienta a GNOME, změna velikosti okna ve správci oken Sway, …
Rakudo (Wikipedie), tj. překladač programovacího jazyka Raku (Wikipedie), byl vydán ve verzi #171 (2024.04). Programovací jazyk Raku byl dříve znám pod názvem Perl 6.
Společnost Epic Games vydala verzi 5.4 svého proprietárního multiplatformního herního enginu Unreal Engine (Wikipedie). Podrobný přehled novinek v poznámkách k vydání.
Byl vydán Nextcloud Hub 8. Představení novinek tohoto open source cloudového řešení také na YouTube. Vypíchnout lze Nextcloud AI Assistant 2.0.
Vyšlo Pharo 12.0, programovací jazyk a vývojové prostředí s řadou pokročilých vlastností. Krom tradiční nadílky oprav přináší nový systém správy ladících bodů, nový způsob definice tříd, prostor pro objekty, které nemusí procházet GC a mnoho dalšího.
Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.
Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.
ahoj jdes na to spravne, chybka bude asi nekde schovana v kodu, ktery jsi sem nenapsal, to co jsi napsal predava referenci na objekt T2, je to tedy parametr predavany odkazem, pokud se jedna o nedynamickou instanci, kterou chces predavat hodnotou, muzes pouzit normalni metoda(T2 objekt) ... tedy treba
class T1 {
void metoda(T2 objekt) { ... }; // hodnotou
void metoda(T2 &objekt) { ... }; // preda nedynamickou instanci odkazem
void metoda(T2 *objekt) { ... }; // preda ukazatel hodnotou, tedy dynamicky vytvoreny objekt odkazem
};
obecne, nejsou zadna omezeni, odkazem muzes predat jakoukoliv tridu....pokud chces predavat hodnotou, napada me jen jedno omezeni, dana trida od ktere je objekt odvozen nesmi byt abstraktni (nesmi obsahovat rize virtualni metody ani dedit nedodefimovane rize virtualni metody)
pokud chces predavat hodnotou, napada me jen jedno omezeni, dana trida od ktere je objekt odvozen nesmi byt abstraktni-- abych mohl předávat instanci jako parametr nějaké metodě, logicky přece nemůže být třída dané instance abstraktní, jelikož jsem ji přece *instancioval*
achjo clovicku, neni to zmatene, poradne si to prectete....
1) ja NEPISU ze nemuze!!! ..jen je to ponekud kostrbate pro jednoduchy projektit o dvou tridach. Samozrejme ze predavat dynamickou promennou referenci je uplne bezne, dokonce casto, pokud se u projektu pracuje s rozsahlimi objekty, voli se parametry metod jako konstantni, predavane referenci, kdezto instance se vytvareji dynamicky
2) nemuze, ale ta instance v momente deklarovani metody s velkou pravdepodobnosti NEEXISTUJE, tedy neprojde to pres onu deklaraci metody
3) kdyz uz jsme u toho slovickareni se slovem staticky bych si tolik nezahraval, pouzival bych radeji dynamicky/nedynamicky nebo alokovany na halde/ alokovany na zasobniku , protoze pod statickou instanci si lze predstavit, jak jiste vite ledaccos
sorry, myslel jsem ze chce obecne vedet zda existuje omezeni pro parametry metod, pak se stejne ukazalo, ze slo o cross-include, takze jsi mel vlastne pravdu s tim ze kod napovi
obecne, nejsou zadna omezeni, odkazem muzes predat jakoukoliv tridu....pokud chces predavat hodnotou, napada me jen jedno omezeni, dana trida od ktere je objekt odvozen nesmi byt abstraktni (nesmi obsahovat rize virtualni metody ani dedit nedodefimovane rize virtualni metody)
To je... nějak divně napsané. Nevím, jakou roli by v tom mohly hrát virtuální metody, ani jak vypadá ne-ryze virtuální metoda. Jinak odkazem se dají předávat samozřejmě i dynamické instance. Ono vůbec o C++ si bude lepší přečíst nějakou pořádnou knížku, třeba od Stroustrupa, než sbírat moudra po webu.
Když se předává hodnotou, musí se dát pozor, aby funkce (metoda) nepřijímala jen předka instance, kterou ji chceš předat. Ty data, která jsou v instanci "navíc" oproti tomu předkovi by mohly zmizet. Je to ten samý důvod, proč zachytávat výjimky odkazem a proč do STL kontejnerů nedávat přímo objekty různých odvozených tříd. Asi by to mělo i vyprodukovat nějaký warning, ale teď v noci to zkoušet nebudu...
mas pravdu, to je dobry postreh, to me nenapadlo ...btw: ja pisu hodne shared library, ktere casto obsahujou tridy, ktere budou pouzivany "zvenci" v pripade napriklad nejakeho obecneho, abstraktniho rendereru, s vetsim pocet rize virtualnich metod se mi semtam stane ze zapomenu v jeho potomkovi nejakou dodefinovat, predam jeho instanci hodnotou (ale instance bude fyzicky deklarovana az v aplikaci pouzivajici knihovnu), tak proto me to napadlo a psal jsem o tom, samozrejme pred prekladem to zarve, takze zadnej kolosalni problem
obecne, nejsou zadna omezeni, odkazem muzes predat jakoukoliv tridu....pokud chces predavat hodnotou, napada me jen jedno omezeni, dana trida od ktere je objekt odvozen nesmi byt abstraktni (nesmi obsahovat rize virtualni metody ani dedit nedodefimovane rize virtualni metody)
Asi bych jeste dodal (jestli si to dobre pamatuju), ze je potreba, aby mela ta trida copy constructor (ano muze byt i defaultni, ale to obcas neni to co chcete)...
#ifndef T1_H #define T1_H #include <systemove_knihovny> #include "T2.h" class T1 { nejake vlastnosti; public: T1(); ~T1(); }; #endifA soubor T2.h vypadá takhle:
#ifndef T2_H #define T2_H #include <kni.h.ovny> #include "T1.h" class T2 { nejake vlastnosti; public: T2(); T2(T1 &t1); // TADYTEN ŘÁDEK DĚLÁ PROBLÉM T2(int i1, int i2, int i3, int i4, bool b1 = false, bool b2 = true); T2(int i1, int i2, bool b1 = false, bool b2 = true); ~T2(); dalsi metody(); ... }; #endifPokud se toto pokusím zkompilovat, dostanu
error: expected `)' before ‘&’ token
na řádku, který jsem označil komentářem (tzn. přímo toto, bez ohledu na to, jestli je implementace v .cpp souboru hotová nebo ne. Stejně se to chová i při pass-by-address nebo obyčejném pass-by-value.
T1 &t1
dát class T1 &t1
.
Což mě ovšem překvapuje - měl jsem za to, že v C++ se název třídy bere jako název typu - při vytváření proměnných to tak funguje, proč to je v deklaraci funkce jinak?
podle meho nazoru to mozna mohlo byt tim, ze jsi includoval T1.h v T2.h a obracene T2.h v T1.h, pokud si pamatuji pri takovymhle krizovym include byva problem s rozpoznanim typu, resenim je pouzit v jednom z h souboru Doprednou deklaraci, napriklad v T2.h pred deklaraci T1: class T1;.....class v deklaraci funkce jsem nepouzival, dovolil bych si spekulovat ze se jedna o ono doprednou deklaraci v hlavicce metody, radeji na to nekam mrkni
class T1;
. Nejlépe nad řádek s class T2 {
.
include
a vyřešit se dá použitím dopředné deklarace.
Jinak obecně v případech, kdy ve třídě A potřebuješ například jen ukazatel na objekt nějaké jiné třídy B, je docela zbytečné před samotnou deklarací A includovat celý hlavičkový soubor třídy B. Kompilátor se spokojí s tím, že ho dopřednou deklarací ujistíš o tom, že třída B bude definovaná prostě jenom někde jinde. Preprocessor tak nebude muset natahovat celý hlavičkový soubor a ušetří to docela dost práce (v opravdu velikém projektu by se spousta závislostí mezi soubory už mohla docela dost projevit na době kompilace).
Tiskni Sdílej: