Diskuze: C++ Tridy << nevim kde mam chybu (easy)
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Zobrazeno 14 zpráv z 14.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.


Při volání členské funkce je potřeba za její název napsat závorky.
cin >> c.getX();
cin >> c.getY();
cin >> c.getRadius();
cin >> c.getColor();
c.printValues();
Diky za odpoved.
Kdyz tam dopisu ty zavorky, tak cin hazi chybu:
Error: no operator ">>" matches these operands; operand type are: std::istream >> int
Jo, promiň, nějak mi to nedošlo, nemůžeš načítat do návratové hodnoty funkce. Leda že by ta funkce vracela referenci, což pokud jsi začátečník počítam nevíš co je. Musíš to načítat do nějaké proměnné a pak třeba nastavit hodnotu setterem.
int color;
cin << color;
c.setColor(color);
Těsně vedle, asi se na mně začíná podepisovat fakt, že jsem v C++ už
pár týdnu nedělal 
Jednoduhsie by to mohlo vyzerat takto:
#include <iostream>
struct Circle{
int x = 0;
int y = 0;
int radius = 0;
int color = 0;
friend std::ostream& operator<<(std::ostream& out, const Circle& c){
return out << "souradnice stredu: " << c.x << " " << c.y << std::endl
<< "polomer: " << c.radius << " " << std::endl
<< "cislo barvy: " << c.color << std::endl;
}
};
int main(){
using namespace std;
Circle c;
cout << "Zadejte prosim souradnici stredu X: ";
cin >> c.x;
cout << "\nZadejte prosim souradnici stredu Y: ";
cin >> c.y;
cout << "\nZadejte prosim polomer kruznice: ";
cin >> c.radius;
cout << "\nZadejte prosim barvu (1, 3, 7, 19 nebo 25) ";
cin >> c.color;
cout << c;
}
Myslím, že pokud se snaží pochopit třídy a tím nejspíš i základy OOP, tak tohle nebude nejvhodnější způsob. Pochybuji, že se už dostal k přetěžování operátorů a friend funkcím.
Ja som as nepochopil preco skoro vseci robia miesto vereinych atributov privatne + primityvne getery a setery... Kod sa potom zbitocne natahuje a s oop to nema nic spolocne.
V tomhle případě je to zbytečné, ale všeobecně je možná lepší si zvyknout atributy zapouzdřovat i když v C++ to v podobných případech taky většinou nedělám. Já ale narážel hlavně na tohle:
friend std::ostream& operator<<(std::ostream& out, const Circle& c){
return out << "souradnice stredu: " << c.x << " " << c.y << std::endl
<< "polomer: " << c.radius << " " << std::endl
<< "cislo barvy: " << c.color << std::endl;
Vsem diky za odpovedi. <i>Myslím, že pokud se snaží pochopit třídy a tím nejspíš i základy OOP, tak tohle nebude nejvhodnější způsob. Pochybuji, že se už dostal k přetěžování operátorů a friend funkcím.</i> Luckin ma pravdu. Tak daleko sem se jeste nedostal.
Svoji aplikaci sem nakonec predelal takhle, ale ty cisla se v konzoli zobrazuji spatne (u vystupu). Vzdy se zobrazi maximum te promenne int (-858993460):
main.cpp <<
#include "hlavicka.h"
#include <iostream>
using namespace std;
void Circle::setCentre(int x, int y){
this->x = x;
this->y = y;
cout << "Zadejte prosim X: " << endl;
cin >> x;
cout << "Zadejte prosim Y: " << endl;
cin >> y;
}
void Circle::setColor(int c){
this->color = c;
cout << "Zadejte barvu v cislech: " << endl;
cin >> c;
}
void Circle::setRadius(int r){
this->radius = r;
cout << "Zadejte prosim radius: " << endl;
cin >> r;
}
void Circle::draw(){
setCentre(x,y);
setColor(color);
setRadius(radius);
}
void Circle::printValues(){
cout << "Souradnice stredu jsou: " << x << " " << y << endl;
cout << "Polomer je: " << radius << endl;
cout << "Barva je: " << color << endl;
}
int main(){
Circle c;
c.draw();
c.printValues();
system("PAUSE");
}
a hlavicka.h <<
#include <iostream>
using namespace std;
class Circle{
public:
void setCentre(int x, int y);
void setRadius(int r);
void setColor(int c);
void printValues();
void draw();
private:
int x, y, radius, color;
};
Vyskúšaj namiesto int, typ long long.
To není maximum, je to nějaká hodnota která je prostě v tu chvíli na daném místě v paměti. Nikde ty proměnné totiž neinicializuješ. Musíš do nich po vytvoření nebo lépe při vytvoření přiřadit nějakou hodnotu. Doporučuju udělat to pomocí konstruktoru.
Teď jsem si všiml, že ty hodnoty načítáš v metodě setCentre, ale načítáš je špatně. Načítáš to do parametrů té metody a ne do atributů třídy. A proč vůbec ta metoda nějaké parametry přebírá, vždyť jsou tam uplně k ničemu a navíc do nich při volání dostazuješ to samé co se jimi pak snažíš nastavit.
Zobrazeno 14 zpráv z 14.