Český telekomunikační úřad zahajuje novou etapu využívání vysokofrekvenčního rádiového spektra v pásmu 26 GHz. Toto pásmo bude od 1. 7. 2026 otevřeno pro provoz moderních bezdrátových sítí, zejména sítí páté generace (5G), pevných bezdrátových přístupových sítí (FWA) a lokálních či průmyslových sítí určených například pro výrobní areály, logistická centra nebo technologické kampusy. Současně s otevřením pásma 26 GHz přistoupil ČTÚ ke zpřístupnění informací o využívání rádiových kmitočtů v tomto pásmu.
Logitech představil myš Signature Comfort Plus M850 L s polstrovanou opěrkou dlaně pro větší pohodlí a sadu s touto myší a klávesnicí s integrovanou opěrkou dlaní Signature Comfort Plus Combo MK880.
Gaël Duval se rozepsal o novinkách a plánech Murena a /e/OS. Počet uživatelů telefonů Murena a mobilního operačního systému /e/OS bez aplikací a služeb od Googlu se blíží 100 000. Ambicí je, aby se /e/OS stal třetí mobilní platformou v Evropě i na světě, s potenciálem dostat se i na PC. Blíží se vydání nové verze 4 s funkcemi zálohování a obnova, import e-mailů z Gmailu a rozpoznávání hlasu. Murena Workspace přinese videohovory, elektronický podpis a správu zařízení (MDM).
Dnes a zítra probíhá Ubuntu Summit 26.04. Na programu je řada zajímavých přednášek. Sledovat je lze na YouTube. Úvodní slovo měli Mark Shuttleworth a Jon Seager.
Lazygit byl vydán ve verzi 0.62.0. Jedná se o TUI (Text User Interface) nadstavbu nad gitem.
Jiří Eischmann se v příspěvku na svém blogu o rozepsal o tom, kam se vyhledávání v jeho očích posledních 10 let posunulo, jaké má zkušenosti s AI vyhledáváním, proč na něm nechce záviset a jaké vyhledávací služby ho v poslední době zaujaly.
Wayland kompozitor Labwc byl vydán ve verzi 0.20.0. Labwc je inspirován správcem oken Openbox. Postavený je na wlroots.
AlmaLinux OS byl vydán ve verzích 9.8 s kódovým jménem Olive Jaguar a 10.2 s kódovým jménem Lavender Lion. Podrobnosti v poznámkách k vydání (9.8 a 10.2). Opraveny byly zranitelnosti Copy Fail (CVE-2026-31431), Dirty FRAG, Fragnesia (CVE-2026-46300), nginx Rift (CVE-2026-42945) a SSH Keysign Pwn (CVE-2026-46333).
Seznam.cz vykázal za rok 2025 tržby v celkové hodnotě 6,454 miliardy korun. Oproti roku 2024 nárůst o 3,68 %. Zisk před zdaněním oproti předcházejícímu roku poklesl, a to o 11,21 % na 1,330 miliardy korun. Vlastní velké jazykové modely SeLLMa najdou dnes uživatelé téměř na všech seznamáckých službách. Na všechny obsahové služby byla zavedena technologie text-to-speech, díky níž si mohou uživatelé přehrát články v audio verzi namluvené
… více »Vláda představila strategické digitalizační projekty. Roadmapa zahrnuje celkem 55 projektů napříč státní správou, z toho 22 prioritních projektů vycházejících přímo z programového prohlášení vlády a 33 projektů založených na platné legislativě. Portfolio pokrývá oblasti financí, zdravotnictví, digitální identity, dat, registrů, dopravy, krizového řízení, sociálních agend i kybernetické bezpečnosti.
Mám problém s dědičností. Mám třídu Widget. Od této třídy mám odvozenu třídu Container. Třída container obsahuje metodu addWidget( Widget *childWidget ). Problém je, že v této metodě nemohu přistupovat k chráněným proměnným třídy Widget. Tj. následující kód hází chybu:
void Container::addWidget( Widget *childWidget )
{
if(childWidget->m_pParent == 0)
{
// ...
} else {
// ...
}
}
Výstup kompilátoru:
./Toolkit/Widget.h: In member function ‘void Toolkit::Container::addWidget(Toolkit::Widget*)’: ./Toolkit/Widget.h:31: error: ‘Toolkit::Widget* Toolkit::Widget::m_pParent’ is protected ./Toolkit/Container.cpp:35: error: within this context ./Toolkit/Widget.h:30: error: ‘GtkWidget* Toolkit::Widget::m_pWidget’ is protected ./Toolkit/Container.cpp:43: error: within this context ./Toolkit/Widget.h:31: error: ‘Toolkit::Widget* Toolkit::Widget::m_pParent’ is protected ./Toolkit/Container.cpp:45: error: within this context
Widget proměnnou
private Widget * m_pParent;
protected Widget * m_pParent;
Container*, tak k nim přistupovat můžu, ale to je docela prasárna.
Berte to tak, že protected vám umožňuje přístup k prvkům rodiče z metod potomka, ale to se týká jen téže instance. Kromě toho mají metody třídy přístup ke všem prvkům jiných instancí téže třídy podle stejných pravidel jako ke svým vlastním, ale to se netýká jiných instancí rodičovské třídy. Takže
class B {
private:
int x;
protected:
int y;
public:
int z;
const B& operator = (const B& s);
};
class D : public B {
public:
const D& operator = (const D& s);
const D& operator = (const B& s);
};
const B& operator = (const B& s);
{
x = s.x // OK
y = s.y // OK
z = s.z // OK
return *this;
}
const D& operator = (const D& s);
{
x = s.x // OK
y = s.y // OK
z = s.z // chyba (na obou stranách)
return *this;
}
const D& operator = (const B& s);
{
x = s.x // OK
y = s.y // chyba (na pravé straně)
z = s.z // chyba (na obou stranách)
return *this;
}
class B {
private:
int x;
protected:
int y;
public:
int z;
const B& operator = (const B& s);
};
class D : public B {
public:
const D& operator = (const D& s);
const D& operator = (const B& s);
};
const B& B::operator = (const B& s);
{
x = s.x // OK
y = s.y // OK
z = s.z // OK
return *this;
}
const D& D::operator = (const D& s);
{
//tohle se mi nezdá
//podle mě je chyba v x=s.x (private)
x = s.x // OK
y = s.y // OK
z = s.z // chyba (na obou stranách)
return *this;
}
const D& D::operator = (const B& s);
{
// dle toho, co jste říkal by měla být chyba
// v x=s.x a y=s.y, ne v z=s.z
x = s.x // OK
y = s.y // chyba (na pravé straně)
z = s.z // chyba (na obou stranách)
return *this;
}
To je docela naprd. Potřebuji totiž nutně nastavit tu chráněnou proměnnou a zároveň nechci, aby byla public. Kdybych si napsal chráněnou metodu třídy Widget, mohl bych ji pak zavolat? Vyzkouším to.
V tom zdrojáku máte samozřejmě pravdu, zapomněl jsem, co bylo nahoře, a dole jsem psal, jako bych to měl obráceně (tj. x public, y protected a z private).
Co se vašeho problému týká, nejjednodušší asi bude použít friend deklaraci.
class Widget{
protected:
virtual void nejakaVirtualniFce();
public:
void nejakaFce();
}
class Container{
public:
friend class Widget;
protected:
virtual void nejakaVirtualniFce();
}
void Widget::nejakaFce()
{
nejakaVirtualniFce();
}
friend pouze umožňuje přístup k protected a private prvkům instance dané třídy, ale volat metodu jiné třídy (aniž by byla použita konkrétní instance) můžete jen tehdy, je-li ta metoda static.
class Widget{
..
};
class Container: public Widget{
public:
friend class Widget;
};
Jestli ne, tak to všechno, co jsem tři dny psal můžu leda tak vyhodit.
Widget budou moci přistupovat k prvkům instancí třídy Container stejně jako metody této třídy. Ale samozřejmě jen u instancí této třídy. Takže asi takto:
class Widget {
virtual ~Widget() {}
void f();
};
class Container: public: Widget {
private:
int x;
public:
virtual ~Container() {}
friend class Widget;
};
void Widget::f()
{
Container* pc = new Container;
pc->x = 0; // OK
Widget* pw = new Widget;
pw->x = 0; // chyba
if (typeid(*this) == typeid(Container) {
x = 0; // chyba
this->x = 0; // chyba
pc = dynamic_cast<Container*>(this);
pc->x = 0; // OK
}
}
. Teď už jen poslední dotaz ohledně toho přetypování. Proč dynamic_cast<Container*>(this)? Jak se to liší od (Container*)(this)?
dynamic_cast<T*>(p) umožňuje přetypovat pouze pokud
T je void
T je rodič typu *p
T je potomek typu *p (compile-time kontrola) a *p je instance typu T nebo některého jejího potomka (run-time kontrola); to ale pouze za předpokladu, že dědičnost je polymorfní, tj. ty třídy mají aspoň jednu virtuální metodudynamic_cast i pro reference.
dynamic_cast je bezpečnější v tom, že snižuje riziko, že přetypujete pointer na něco, čím není.
Tiskni
Sdílej: