Aktywne Wpisy

sportpomnikow +66
Aby nie było wątpliwości: jest to pomidor dziś rano zerwany z krzaka.
#przyroda #humorobrazkowy #warzywa
#przyroda #humorobrazkowy #warzywa
źródło: HPGvDPSWsAAklPZ
Pobierz
one_man_army +70
To co tu widzicie, to jest efekt lat treningu, zawziętości, wytrwałości, potu, walki z przeciwnościami, pogodą, trudu i nie małych pieniędzy. I tak oto uzyskałem licencję SPL (pilota szybowcowego). Pijcie ze mno kompot. #chwalesie #szybownictwo
źródło: IMG_6697
Pobierz




Mam problem z przeładowaniem operatora ! (operator overload). Zdaję sobie sprawę, że mój przykład zaburza semantykę języka i można to zrobić bardziej czytelnie, ale jako że uczę się c++ to próbuję różnych rzeczy. Otóż mam klasę Card
która opisuje kartę do gry. Na samym dole zaimplementowany jest operator !.
Tutaj pojawiają się pytania, otóż
1. Dlaczego tam występuje const (zakładam, że gwarantuje on że parametr podany przez referencje się nie zmieni?)
2. W jaki sposób mogę użyć tego operatora w metodzie klasy Card? Na przykład w print?
!thisniestety nie działa i powoduje exception badalloc.Wszystko jest w porządku jeśli nie użyję operatora
!, ale zapiszę normalny warunek(color == -1 || figure == -1)Card::Card(){figure = -1;
color = -1;
}
Card::Card(short a, short b) {
figure = a;
color = b;
hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
}
void Card::setVisible() {
visible ^= true;
}
std::string Card::print(bool force){
if (!this) return "HH"; //to nie działa
if (!visible && !force)return "##";
short k;
(color%2)?k=12:k=15;
SetConsoleTextAttribute(hConsole, k);
return figures[figure] + colors[color];
}
//tutaj przeładowanie operatora
bool Card::operator !() const {
return !(color == -1 || figure == -1);
}
1. const umożliwia wywołanie metody( tutaj przeładowanego operatora) na obiekcie zadeklarowanym jako const, this będzie wtedy typu
const Card*.2.
!thiszawsze powinno zwrócić true (wskaźnik nigdy nie będzie nullptr) chyba że robisz jakieś UB. A jeżeli chcesz wywołać przeładowany operator w klasie to wywołaj go na referencji czyli!*this.Dodatkowo nie powiano się robić takich metod jak print wewnątrz klasy, które używają czegoś poza klasy.
Kolejna
false, prawda? :)@sokytsinolop:
!thiszawsze zwracafalse.