Multiplatformní emulátor terminálu Ghostty byl vydán ve verzi 1.2 (𝕏, Mastodon). Přehled novinek, vylepšení a nových efektů v poznámkách k vydání.
Byla vydána nová verze 4.5 (𝕏, Bluesky, Mastodon) multiplatformního open source herního enginu Godot (Wikipedie, GitHub). Přehled novinek i s náhledy v příspěvku na blogu.
Byla vydána verze 3.0 (Mastodon) nástroje pro záznam a sdílení terminálových sezení asciinema (GitHub). S novou verzí formátu záznamu asciicast v3, podporou live streamingu a především kompletním přepisem z Pythonu do Rustu.
Canonical oznámil, že bude podporovat a distribuovat toolkit NVIDIA CUDA (Wikipedie) v Ubuntu.
Tržní hodnota americké společnosti Alphabet, která je majitelem internetového vyhledávače Google, dnes poprvé překonala hranici tří bilionů dolarů (62,1 bilionu Kč). Alphabet se připojil k malé skupině společností, které tuto hranici pokořily. Jsou mezi nimi zatím americké firmy Nvidia, Microsoft a Apple.
Spojené státy a Čína dosáhly dohody ohledně pokračování populární čínské platformy pro sdílení krátkých videí TikTok v USA. V příspěvku na síti Truth Social to dnes naznačil americký prezident Donald Trump. Dosažení rámcové dohody o TikToku vzápětí oznámil americký ministr financí Scott Bessent, který v Madridu jedná s čínskými představiteli o vzájemných obchodních vztazích mezi USA a Čínou. Bessentova slova později potvrdila také čínská strana.
MKVToolNix, tj. sada nástrojů pro práci s formátem (medialnym kontajnerom) Matroska, byl vydán ve verzi 95.0. Podpora přehrávání formátu Matroska míří do Firefoxu [Bug 1422891, Technický popis]. Přehrávání lze již testovat ve Firefoxu Nightly.
Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 211. sraz, který proběhne v pátek 19. září od 18:00 ve Studentském klubu U Kachničky na Fakultě informačních technologií Vysokého učení technického na adrese Božetěchova 2/1. Na srazu proběhne přednáška Jiřího Eischmanna o nové verzi prostředí GNOME 49. Nemáte-li možnost se zúčastnit osobně, přednáškový blok bude opět streamován živě na server VHSky.cz a následně i zpřístupněn záznam.
Microsoft se vyhnul pokutě od Evropské komise za zneužívání svého dominantního postavení na trhu v souvislosti s aplikací Teams. S komisí se dohodl na závazcích, které slíbil splnit. Unijní exekutivě se nelíbilo, že firma svazuje svůj nástroj pro chatování a videohovory Teams se sadou kancelářských programů Office. Microsoft nyní slíbil jasné oddělení aplikace od kancelářských nástrojů, jako jsou Word, Excel a Outlook. Na Microsoft si
… více »Samba (Wikipedie), svobodná implementace SMB a Active Directory, byla vydána ve verzi 4.23.0. Počínaje verzí Samba 4.23 jsou unixová rozšíření SMB3 ve výchozím nastavení povolena. Přidána byla podpora SMB3 přes QUIC. Nová utilita smb_prometheus_endpoint exportuje metriky ve formátu Prometheus.
Fraction::Fraction(int znum, int zden) { num = znum; den = zden; normalize(); } Fraction::Fraction(double f) { num = int(f) * 10000; num += int((f - int(f))*10000.0); den = 10000; normalize(); } Fraction Fraction::operator+(Fraction b) { return Fraction(den*b.num+b.den*num, den*b.den); } ... c4=-.5+c1Teraz s pouzitim gcc 4.0.3 dostanem chybu:
no match for ‘operator+’ in ‘-5.0e-1 + c1’
Po takejto uprave to chodi:
c4=Fraction(-.5)+c1
V com je problem? Nemal by sa implicitne pouzit konstruktor Fraction(double)?
Aby vám tohle prošlo, musel byste použít samostatný operátor, ne metodu. Tedy např.:
inline Fraction operator + (const Fraction& x, const Fraction& y) { return Fraction(x.den*y.num+y.den*x.num, x.den*y.den); }
den
a num
su private. Radsej uvediem kompletny kod. Trochu som cvicil s C++ pred par rokmi no daleko som sa nedostal, teraz som znovu dostal chut fraction.h: #ifndef FRACTION_H #define FRACTION_H #include <iostream> using namespace std; class Fraction { int num, den; int gcd(int, int); public: Fraction(int = 0, int = 1); Fraction(double); Fraction(const Fraction&); void normalize(); Fraction operator+(const Fraction&); Fraction operator-(); Fraction operator-(const Fraction&); Fraction operator*(const Fraction&); Fraction operator/(const Fraction&); const int numerator() const; const int denominator() const; friend ostream& operator<<(ostream& os, const Fraction& z); friend istream& operator>>(istream& is, Fraction& z); const double toDouble() const; }; #endif fraction.cpp: #include "fraction.h" int Fraction::gcd(int a, int b) { int c = 1; a = (a >= 0) ? a : - a; b = (b >= 0) ? b : - b; while (c > 0) { c = a % b; a = b; b = c; } return a; } Fraction::Fraction(int znum, int zden) { num = znum; den = zden; normalize(); } Fraction::Fraction(const Fraction& z):num(z.num), den(z.den) { cout << "Fraction(const Fraction&) : " << *this << endl; } Fraction::Fraction(double f) { num = int(f) * 10000; num += int((f - int(f))*10000.0); den = 10000; normalize(); } void Fraction::normalize() { int lgcd = gcd(num, den); num /= lgcd; den /= lgcd; } Fraction Fraction::operator+(const Fraction &b) { return Fraction(den*b.num+b.den*num, den*b.den); } Fraction Fraction::operator-() { return Fraction(-num, den); } Fraction Fraction::operator-(const Fraction& b) { return Fraction(b.den*num-den*b.num, den*b.den); } Fraction Fraction::operator*(const Fraction& b) { return Fraction(num*b.num,den*b.den); } Fraction Fraction::operator/(const Fraction& b) { return Fraction(num*b.den, den*b.num); } const int Fraction::numerator() const { return num; } const int Fraction::denominator() const { return den; } ostream& operator<<(ostream& os, const Fraction& z) { if(z.den == 1) return os << z.num; else return os << z.num << "/" << z.den; } istream& operator>>(istream& is, Fraction& z) { char c; is >> z.num; is >> c; is >> z.den; return is; } const double Fraction::toDouble() const { return double(num)/double(den); } fractest.cpp: #include <iostream> #include "fraction.h" #define P(x) cout << "[" #x "] = " << (x) << endl; /* inline Fraction operator+(const Fraction& x, const Fraction& y) { return Fraction(x+y); } */ int main() { Fraction c1(12,123); Fraction c2(98); Fraction c3(0,1); Fraction* c5 = new Fraction(2,3); P(c1); P(c2); P(c3); P(*c5); P(c3=c1+c2); P(c3=c1-c2); P(c3=c1*c2); P(c3=c1/c2); P(*c5=c1+c2+c3); P(c3=c1+c2/c3-c1); P(c3=(c1+c2)/(c3-c1)); Fraction c4 = c3; P(c4); P(c4=c1+5+5.5); P(c4=7); P(c4=-.5); P(c4=c4+c1); P(c4=Fraction(-.5)+c1); // P(c4=-.5+c1); P(c4=c1-.5); P(c4.toDouble()); // P(double(c4)); delete c5; return 0; }
Jestli je problém jen v tom, že jsou private
, tak buď v implementaci operátoru použíjte přístupové metody numerator()
a denominator()
nebo ten operátor deklarujte jako friend
.
Mimochodem, z logiky věci by asi metodu gcd()
bylo v tomto případě vhodnější deklarovat jako static
.
Tiskni
Sdílej: