2014-11-29, 14:18
  #1
Medlem
eightys avatar
Jag vill kunna skriva liknande kod som denna i min main.
Kod:
Uset S0; //empty set
Uset S1(5); //S1 = {5}
if ( !S0 )
 cout << "Set S0 is empty!!" << endl;
 if ( S1 )
 cout << "Set S1 is not empty!!" << endl; 

Där USet är en klass som består av en Array.

Jag försöker med detta

Kod:
USet USet:: operator bool (const USet& b) const
{
    if (counter == 0)
        return true;

    return false;
}

Men får felmeddelandet
Citat:
returntype specified for operator bool

Någon som har en aning om hur man kan lösa detta?
Citera
2014-11-29, 14:31
  #2
Medlem
LeonVances avatar
Det är väl operator != du ska göra overload på. if ( a ) { } är ju samma sak som if ( a != 0 ) { }
Citera
2014-11-29, 14:32
  #3
Medlem
tj.s avatar
bool är en datatyp, inte en operator. Det är väl snarare ==-operatorn du vill överlagra?
Citera
2014-11-29, 14:34
  #4
Medlem
eightys avatar
Försökte först overloda operator!(), men då gick det inte att testa if(s).
Citera
2014-11-29, 14:47
  #5
Medlem
Blev lite osäker på om det går eller inte, testade lite snabbt, funkar fint för mig. Det är alltså en konversionoperator. När du försöker använda klassen som en bool körs operator bool().

if(c == false) och liknande funkerar lika väl som if(c)

Kod:
class MyClass
{
public:
	MyClass();
	~MyClass();

	void setValue(bool b) { this->myBool = b; }

	operator bool()
	{
		return myBool;
	}
private:
	bool myBool;
};

Mitt test.
__________________
Senast redigerad av zoorroo4 2014-11-29 kl. 14:51.
Citera
2014-11-29, 15:00
  #6
Medlem
eightys avatar
Vad gör den här raden?
Kod:
void setValue(bool b) { this->myBool = b; }
Citera
2014-11-29, 15:07
  #7
Medlem
tj.s avatar
Citat:
Ursprungligen postat av eighty
Vad gör den här raden?
Kod:
void setValue(bool b) { this->myBool = b; }
Den sätter MyClass medlemsvariabel myBool till det värdet som man skickar in i funktionen.
Citera
2014-11-29, 15:18
  #8
Medlem
eightys avatar
Nu fungerar det, tack så mycket!
__________________
Senast redigerad av eighty 2014-11-29 kl. 15:24.
Citera
2014-11-29, 15:51
  #9
Medlem
En användbar operator när det gäller arrayer är casting operatorn (int) eller i det här fallet kanske bättre (unsigned int),
den sätter man att returnera typ (const unsigned int) counter;

Alltså returnerar antalet element, objekt, i arrayen

Kod:
if ( S0 == 0 )
 cout << "Set S0 is empty!!" << endl;
 if ( S1 > 0 )
 cout << "Set S1 is not empty!!" << endl;

I äldre C++ kompilatorer, tex ngra beta releases så var man då tvungen att skriva så här istället:

Kod:
if ( ((unsigned int) S0) == 0 )
 cout << "Set S0 is empty!!" << endl;
 if ( ((unsigned int) S1) > 0 )
 cout << "Set S1 is not empty!!" << endl;

Bara för att få kompilatorerna att förstå att det var casting operatorn som skulle användas.

Man kan också välja att överlagra typ operatorerna == (int) och > (int)
Citera
2014-12-06, 09:07
  #10
Medlem
Batman182s avatar
Citat:
Ursprungligen postat av eighty
Vad gör den här raden?
Kod:
void setValue(bool b) { this->myBool = b; }

Hur kan du hålla på med operatoröverlagring när du inte (ens?) vet vad den raden gör?
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in