jestem definiowania wielu przeciążeniem operatora przypisania następująco:Boolean i String Przeciążenie operatora przypisania (C++)
Foo.h
class Foo
{
private:
bool my_bool;
int my_int;
std::string my_string;
public:
Foo& operator= (bool value);
Foo& operator= (int value);
Foo& operator= (const std::string& value);
};
Foo.cpp
// Assignment Operators.
Foo& Foo::operator= (bool value) {my_bool = value; return *this;}
Foo& Foo::operator= (int value) {my_int = value; return *this;}
Foo& Foo::operator= (const std::string& value) {my_string = value; return *this;}
A tutaj jest mój main.cpp (patrz komentarz oznaczony SURPRISE
):
Foo boolFoo;
Foo intFoo;
Foo stringFoo;
// Reassign values via appropriate assignment operator.
boolFoo = true; // works...assigned as bool
intFoo = 42; // works...assigned as int
stringFoo = "i_am_a_string"; // SURPRISE...assigned as bool, not string
std::string s = "i_am_a_string";
stringFoo = s; // works...assigned as string
// works...but awkward
stringFoo = static_cast<std::string>("i_am_a_string");
Pytanie: Czy ktoś może mi powiedzieć, dlaczego niecenzuralny ciąg literału jest oceniany w kontekście boolowskim?
@Mooing Duck: Dlaczego usunąć konstruktorów? Dodałem je, aby celowo wskazać, że zmienna może być *** zainicjowana *** za pośrednictwem konstruktora, a następnie *** ponownie przydzielona *** za pośrednictwem operatora przypisania. (Jak widziałem w innych wpisach SO, czasami potrzebujesz *** obydwu ***.) – DavidRR
Poprawiłem kod z powodu [Dobre pytania mają krótki, samodzielny przykład kompilacji] (http://sscce.org/) i [Twój kod może być znacznie krótszy i prostszy, a mimo to nadal powielać problem] (http://ideone.com/W2nemc). Nie przeczytałem większości twojego pytania za pierwszym razem, ponieważ zawierał on zbyt dużo kodu i domyśliłem się (poprawnie), że większość z nich nie była związana z twoim pytaniem. –
@Mooing Duck: Tak, zgadzam się w zasadzie i rozważyłem to podczas dodawania konstruktorów do mojego przykładu. Ale odłożę tu na twój sąd. Mam jednak nadzieję, że każdy, kto natknie się na mój komentarz, będzie wiedział, że powinien wziąć pod uwagę także powiązane czynniki. – DavidRR