[C++] Operator overloading-problem (egen strängklass)

Permalänk
Hedersmedlem

[C++] Operator overloading-problem (egen strängklass)

Jag tyckte att det var ett vettigt sätt att lära sig klasser, så jag tog och började knåpa på en strängklass igår.
Hittils så har det gått jäkligt bra måste jag säga.
Jag har fått ihop medlemsfunktioner som set(), del(), realloc(ny_storlek), realloc_save(ny_storlek) som sparar strängen och gör "mer plats", append, lägga till innan osv.
Det har dock inte med saken att göra, än.

Just nu håller jag på att lära mig operator overloading, som hittils har gått rätt bra.

Om ni ursäktar den rätt kladdiga koden så länge.

TestString &TestString::operator+ (char *str) { if (!str) return *this; if (m_string && strlen(str)+strlen(m_string)+1 >= m_size-1) realloc_save(strlen(str)+strlen(m_string)+2); else if (!m_string) return *this; this->append(str); return *this; }

Problemet:
Den här koden funkar för tillfället prima:

TestString a(1); // minnesallokeringen sköter sig själv ändå, funderar på att göra om min constructor a.set("abc"); a += "def";

Eller följande, funkar lika bra:

TestString a(1), b(1); a.set("abc"); b = a + "def";

Jag kan alltså
1) Lägga ihop flera "strings" med +
2) Lägga till en char* på slutet med +
3) Blanda lite allmänt.

Men, äntligen till det riktiga problemet, jag kan INTE lägga ihop två char* eftersom jag inte "overloadat" den.

Funkar INTE:

TestString a(1); a = "abc" + "def";

"error C2110: cannot add two pointers"

Går detta att lösa på något sätt och isåfall (ungefär?) hur? Orkar ärligt talat inte tänka för tillfället, ska ta och sova lite snart

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
Mobil: Moto G200

Permalänk
Medlem

Har med operatorprioritet att göra.
Gör så här;

TestString a(1);
(a = "abc") + "def"

Se till att tilldelning returnerar en referens till objektet bara.

F ö kan man inte överlagra operatorer för inbyggda typer,
om du skulle försöka det.

Permalänk
Hedersmedlem

Jepp, det funkade (åtminstone när jag overloadat för char*-parameter också... hade tydligen missat det ).
Jag märkte att STL's std::string har samma problem, så då är det väl inte mycket att göra åt saken (läs: bry sig ).

Visa signatur

Asus ROG STRIX B550-F / Ryzen 5800X3D / 48 GB 3200 MHz CL14 / Asus TUF 3080 OC / WD SN850 1 TB, Kingston NV1 2 TB + NAS / Corsair RM650x V3 / Acer XB271HU (1440p165) / LG C1 55"
Mobil: Moto G200

Permalänk
Medlem

*raderat*

Edit: sen, se ovan.