Společnost Raspberry Pi patřící nadaci Raspberry Pi chystá IPO a vstup na londýnskou burzu.
Google na své vývojářské konferenci Google I/O 2024 představil řadu novinek. Keynote byl věnován umělé inteligenci (DeepMind, Gemini, Responsible AI).
V Gitu bylo nalezeno 5 zranitelností. Opraveny jsou ve verzích 2.45.1, 2.44.1, 2.43.4, 2.42.2, 2.41.1, 2.40.2 a 2.39.4. Útočník může připravit repozitář tak, že při jeho klonování (git clone) může dojít ke spuštění libovolného kódu.
Virtualizační softwary VMware Workstation Pro a VMware Fusion Pro jsou nově pro osobní použití zdarma. Softwary VMware Workstation Player a VMware Fusion Player končí.
Linuxová distribuce Endless OS (Wikipedie) byla vydána ve verzi 6.0.0. Přehled novinek i s náhledy v příspěvku na blogu, poznámkách k vydání a také na YouTube.
Byl vydán Mozilla Firefox 126.0. Přehled novinek v poznámkách k vydání, poznámkách k vydání pro firmy a na stránce věnované vývojářům. Vylepšena byla funkce "Zkopírovat odkaz bez sledovacích prvků". Přidána byla podpora zstd (Zstandard). Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 126 je již k dispozici také na Flathubu a Snapcraftu.
Grafana (Wikipedie), tj. open source nástroj pro vizualizaci různých metrik a s ní související dotazování, upozorňování a lepší porozumění, byla vydána ve verzi 11.0. Přehled novinek v aktualizované dokumentaci.
Byla vydána nová verze 24.0 linuxové distribuce Manjaro (Wikipedie). Její kódové jméno je Wynsdey. Ke stažení je v edicích GNOME, KDE PLASMA a XFCE.
Byla představena oficiální rozšiřující deska Raspberry Pi M.2 HAT+ pro připojování M.2 periferii jako jsou NVMe disky a AI akcelerátory k Raspberry Pi 5. Cena je 12 dolarů.
V Praze o víkendu proběhla bastlířská událost roku - výstava Maker Fair v Praze. I strahovští bastlíři nelenili a bastly ostatních prozkoumali. Přijďte si proto i vy na Virtuální Bastlírnu popovídat, co Vás nejvíce zaujalo a jaké projekty jste si přinesli! Samozřejmě, nejen českou bastlířskou scénou je člověk živ - takže co se stalo ve světě a o čem mohou strahováci něco říct? Smutnou zprávou může být to, že provozovatel Sigfoxu jde do
… více »dobrý den,
Měl bych dotaz.
Vytvořil jsem si jednu třídu CZamestnanci a 2 potomky CVojak a COz.
vytvořil jsem si pole objektů třídy CZamestnanec :
CZamestnanec *lide[100];
nyní bych chtěl vytvářet objekty (potomky) CVojak a COz
pokud vsak vytvorim objekt takto : lide[0] = new CVojak tak objekt lide[0] je stále třídy CZamestanci.
Nevíte jak to udělat tak aby mohl vytvářet prvky pole třídy CVojak nebo COz podle toho jaky typ zrovna chci?
děkuji za odpověď
Disclaimer: v C++ som nikdy nič užitočné nenaprogramoval a vedomosti mám viacmenej len zo školy, takže tento komentár berte s rezervou.
K Tvojmu problému: pokiaľ viem, tak on to je CVojak, ale tým že k nemu pristupuješ cez typ CZamestnanec *, tak s ním môžeš robiť len ako s CZamestnancom. Keď chceš volať metódy zdedených tried, tak tie metódy musia byť virtual a keď chceš prístupiť k dátam toho CVojaka, tak to jedine, že si ten smerník predtým pretypuješ.
#include <iostream> using namespace std; class Zamestnanec{ public: void setNazev(){cout << "Nazev";} void setJidlo(){cout << "Jidlo";}; }; class Debil : public Zamestnanec{ public: void setZadrz(){cout << "Zadrz";}; }; class Kokot : public Zamestnanec{ public: void setOjeb(){cout << "Ojeb";}; }; int main(int argc, char** argv) { Zamestnanec *pole[100]; pole[0] = (Debil*) new Debil(); pole[1] = new Kokot(); ((Debil*)pole[0])->setZadrz(); return 0; }
Děkujimoc. Zachránil jsi mi život...Tohle funguje bezvadně
To možná jo, ale já jsem příliš velkej začátečník abych věděl co to je
#include <iostream> #include <vector> using namespace std; class Zamestnanec{ public: void setNazev(){cout << "Nazev";} void setJidlo(){cout << "Jidlo";}; }; class Debil : public Zamestnanec{ public: Debil(int d){ this->data=d; } void setZadrz(){cout << this->data;} private: int data; }; class Kokot : public Zamestnanec{ public: void setOjeb(){cout << "Ojeb";}; private: int data; }; int main(int argc, char** argv) { vector<Zamestnanec*> pole; pole.push_back((Debil*) new Debil(5)); pole.push_back(new Kokot()); ((Debil*)pole.at(0))->setZadrz(); return 0; }Výhodou je to že nejsi omezenej na staticky určený počet zaměstnancú.
class Zamest { public: virtual void setNazev() = 0; virtual int plat() = 0; void spolecne_veci(parametry..); } class Programator : public Zamest{ public: void setNazev() { cout << "aaaaaaaaa"; } int plat() { return 10000000; } ....... } class Uklizecka : public Zamest { public: void setNazev() { cout << "bbbbbbb"; } int plat() { return 5; } ......... } ............ Zamest *pole[100]; pole[0] = new Uklizecka(); ......Takto bych to řesil já
Ach jo, jak vidim na blbou otazku, blbe odpovedi... Proboha lidi, kdyz uz se pta zacatecnik, tak mu poradte tak, aby mu to alespon k necemu bylo!
Pokud bych se mel drzet zadani a prihlednu ke stavajicim odpovedim, tak to uz muzete rovnou pouzit toto (radsi explicitne rikam: TAKTO NE!):
void* pole[SIZE]; pole[0] = new Jenicek; pole[1] = new Marenka; ((Jenicek*) pole[0])->vidimSvetylkoVDali((*Marenka)pole[1]);
Divim se, ze se nikdo nezeptal, jak a proc se k jednotlivym prvkum bude pristupovat. Pokud cilem je pouze volat virtualni metody prvku kontejneru, tak je naprosto zbytecne toto vubec resit. Pokud je nutne k jednotlivym prvkum pristupovat odlisne v zavislosti na jejich typu (predpokladam, ze jsou to ruzni potomci jednoho predka), tak to znamena spatny navrh a problem by mel byt vyresen jinak (s vyuzitim virtualnich metod).
Pokud se tomu opravdu nejde vyhnout, tak pro pretypovani predka na potomka se pouziva dynamic_cast (coz je dle meho nazoru prasarna, ale to je opravdu pouze muj nazor), ktere zarucuje typovou kontrolu, takze reseni by vypadalo asi takto.
class BlbecVlese { virtual ~BlbecVLese() {} }; class Jenicek : public BlbecVlese {...}; class Marenka : public BlbecVLese {...}; ... BLbecVLese* blbci[100]; blbci[0] = new Jenicek; blbci[1] = new Marenka; ... BlbecVLese* x = blbci[y]; //predpokladany predek Jenicek* j = 0; Marenka* m = 0; if ( 0 != (j = dynamic_cast<Jenicek*>(x)) ) j->vylezNaStrom(); else if ( 0 != (m = dynamic_cast<Marenka*>(x)) ) m->pockejPodStromem(); else { jezibaba->sezer(x); throw kosti; } ...
Omlouvam se za konfliktni ton... Nechci rozpoutavat flame. Jen si myslim, ze rady zacatecnikovy by nemely byt ve smyslu: "chci udelat prasarnu => nekdo mi poradi jeste vetsi prasarnu jak to realizovat"
Tiskni Sdílej: