KiCad (Wikipedie), sada svobodných softwarových nástrojů pro počítačový návrh elektronických zařízení (EDA), byl vydán v nové major verzi 10.0.0 (𝕏). Přehled novinek v příspěvku na blogu.
Letošní Turingovou cenu (2025 ACM A.M. Turing Award, Nobelova cena informatiky) získali Charles H. Bennett a Gilles Brassard za základní přínosy do oboru kvantové informatiky, které převrátily pojetí bezpečné neprolomitelné komunikace a výpočetní techniky. Jejich protokol BB84 z roku 1984 umožnil fyzikálně zaručený bezpečný přenos šifrovacích klíčů, zatímco jejich práce o kvantové teleportaci položila teoretické základy pro budoucí kvantový internet. Jejich práce spojila fyziku s informatikou a ovlivnila celou generaci vědců.
Firefox 149 dostupný od 24. března přinese bezplatnou vestavěnou VPN s 50 GB přenesených dat měsíčně (s CZ a SK se zatím nepočítá) a zobrazení dvou webových stránek vedle sebe v jednom panelu (split view). Firefox Labs 149 umožní přidat poznámky k panelům (tab notes, videoukázka).
Byla vydána nová stabilní verze 7.9 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 146. Přehled novinek i s náhledy v příspěvku na blogu.
Dle plánu byla vydána Opera GX pro Linux. Ke stažení je .deb i .rpm. V plánu je flatpak. Opera GX je webový prohlížeč zaměřený na hráče počítačových her.
GNUnet (Wikipedie) byl vydán v nové major verzi 0.27.0. Jedná se o framework pro decentralizované peer-to-peer síťování, na kterém je postavena řada aplikací.
Byly publikovány informace (technické detaily) o bezpečnostním problému Snapu. Jedná se o CVE-2026-3888. Neprivilegovaný lokální uživatel může s využitím snap-confine a systemd-tmpfiles získat práva roota.
Nightingale je open-source karaoke aplikace, která z jakékoliv písničky lokálního alba (včetně videí) dokáže oddělit vokály, získat text a vše přehrát se synchronizací na úrovni jednotlivých slov a hodnocením intonace. Pro separaci vokálů využívá UVR Karaoke model s Demucs od Mety, texty písní stahuje z lrclib.net (LRCLIB), případně extrahuje pomocí whisperX, který rovněž využívá k načasování slov. V případě audiosouborů aplikace na
… více »Po půl roce vývoje od vydání verze 49 bylo vydáno GNOME 50 s kódovým názvem Tokyo (Mastodon). Podrobný přehled novinek i s náhledy v poznámkách k vydání a v novinkách pro vývojáře.
Článek na stránkách Fedora Magazinu informuje o vydání Fedora Asahi Remixu 43, tj. linuxové distribuce pro Apple Silicon vycházející z Fedora Linuxu 43.
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
. Tak například vector by se dal použít takto:
#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ú.
. Třeba bude mít štěstí
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" 
. No tak když ono to svádělo mu tak poradit
. Jinak plně souhlasím stím že bude špatně navrženej už koncept. A dost pochybuji, že jako začátečník by se měl zaobírat věcmi jako dynamic_cast.
Tiskni
Sdílej: