Funkcja konwertująca

Funkcja konwertująca
WI
  • Rejestracja:około 5 lat
  • Ostatnio:prawie 5 lat
  • Postów:2
0

Mam klasę
class string { int roz; char *wsk; };
i potrzebuje wykonać ten kod
string s("ABC"); cout<<s<<endl;

wewnątrz nie ma operatora<<. Mam podobno skorzystać z funkcji konwertującej, a samo rozwiązanie to jedna linijka kodu.
Siedzę jednak i googluje już od dobrych 2 godzin i nie jestem w stanie zrozumieć co mam zrobić.

Próbowałem jakoś konwertować moją klasę na string, ale to chyba nie jest dobre rozwiązanie.

MarekR22
użyj linii "```cpp" oraz "```" do kolorowania składni
MarekR22
pokaż co już masz zrobione.
WI
Nic nie jest zrobione, przecież o to w tym zadaniu chodzi by znaleźć sposób by cout<<s sie wykonało bez operatora <<.
MarekR22
No to nie rozumiem, problemu, bo sposób masz podany (i jest on nie najlepszym pomysłem).
WI
Czy mając taką konwersje z operatorem char* potrzebuje wciąż zrobić konstruktor (const string& s)?
plx211
  • Rejestracja:ponad 11 lat
  • Ostatnio:4 miesiące
  • Postów:181
0

Domyślam się że chodzi ci o to https://dsp.krzaq.cc/post/304/jak-przeladowywac-operatory-w-mojej-klasie/
Zrób metodę getText() która będzie ci zwracała tekst przechowywany w obiekcje, wtedy będziesz mógł printować ją w taki sposób std::cout << foo.getText() << "\n", bez przeciążenia operatora << raczej nie uzyskasz czegoś jak std::cout << foo << "\n"

Możesz także spróbować przeciążyć operator char* () lub operator std::string () (https://en.cppreference.com/w/cpp/language/cast_operator)

edytowany 3x, ostatnio: plx211
WI
Mam to zrobić bez przeładowywania <<
WI
Spróbuje jeszcze raz przeciążyć tego chara* albo stringa. Właśnie o to chodzi by nie było tam żadnej funkcji czy operatora << a cout<<s sie wykonał.
MarekR22
Moderator C/C++
  • Rejestracja:ponad 17 lat
  • Ostatnio:minuta
1

Dokładnie wiem co masz dopisać, ale mnie "k&#@!#^a" bierze jak wiedzę to int roz; char *wsk; i jeszcze jak widzę jak masz to rozwiązać.
Ktoś cię źle uczy i teraz zastawaniem się: czy powinienem do tego przyłożyć rękę?

Ale niech będzie:

Kopiuj
class crap_string
{
public:
     operator const char *() const {
          return wsk;
     }

     int roz; char *wsk;
};

https://wandbox.org/permlink/43B64WwoQao9ZGnS


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.
WI
Twój kod nie działa mi w Visual Studio. Czy to kwestia, że nie tylko nie powinno się tego nie robić, ale też nie wolno tego robić?
MarekR22
Co znaczy nie działa? Kompilować się kompiluje: https://godbolt.org/z/X8TEWg i działa https://rextester.com/APMS10361
WI
No tak, online widze kompiluje, jednak w VS nie. E0144 a value of type "const char *" cannot be used to initialize an entity of type "char *"
MarekR22
to jest warrning, który też widać na gcc. To jest takie mało oszustwo z mojej storony, by nie dawać ci gotowca na całą klasę.
elwis
  • Rejestracja:ponad 18 lat
  • Ostatnio:18 dni
0

A ja to zawsze robiłem definiując operator. Jakoś tak:

Kopiuj
ostream &operator<<(ostream &o) {
    o.write(wsk, roz);
}

Podzielam opinię, że chyba ktoś cię w tej nauce wiedzie na manowce. :)


edytowany 3x, ostatnio: elwis
MarekR22
bo tak się to robi normalnie, ale on/ona ma nauczyciela lubiącego udziwniać.
elwis
a, nie zauważyłem komentarza.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.