Témakör: Operátor túlterhelés


5.1 . megoldással  Kétdimenziós vektor

Webmester felhasználó

Írjunk egy kétdimenziós vektor osztályt!

  • Az osztály kívülről hozzáférhetően tárolja a vektor x és y értékét!
  • Inicializáláskor a vektort meg lehessen adni 0, 1 vagy 2 értékkel is!
  • A vektorhoz lehessen hozzáadni, belőle kivonni más kétdimenziós vektorokat! Továbbá más vektorral lehessen összeszorozni (skaláris szorzat)!
  • A program tagolása (.h: osztálydeklaráció, .cpp: hosszabb implementációjú függvények törzse) a C++ programozók körében elterjedt konvenciók alapján történjen, és védjük le a többszörös beépítésből eredő újradefinicióról szóló hibaüzeneteket. A tesztelő függvény is külön állományba kerüljön.
  • Írjunk egy diagnosztikai függvényt, amely kiírja a tagváltozók értékét, és egy tesztelő függvényt (main), amely teszteli a konstruktorokat és a többi tagfüggvényt.

  • Egészítsük ki a megoldást a következő operátorok túlterhelésével:
  • Operator+
  • Operator-
  • Operator*
  • Operator[] (tegyük lehetővé, hogy konstans objektumok koordinátáit is le lehessen kérdezni)
  • Tegyük lehetővé, hogy osztályunk beilleszkedjen a C++ I/O-ba!


2008.01.13. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


5.4 . megoldással  Hibakeresés túlterhelt operátorokban

Webmester felhasználó

Döntsük el, okoznak e hibát az alábbi programrészletek! Ha igen, adjuk meg, hogy fordítási vagy futási idejű-e a hiba, illetve a hiba helyét és magyarázatát! Javasoljunk megoldást, ha van hiba! A programrészletekben elírások nincsenek, az összes meghívott függvény ill. hivatkozott osztály létezik, ha nincs megadva a kódrészletben, akkor feltételezzük a helyes működést.

Ez a feladat főként a zárthelyire való felkészülést segíti, mindenképp érdemes a számonkérés előtt áttanulmányozni.

a)
String::String(
const String& theOther)

{

      ...

            *this=theOther;

}

 

String & String::operator=(String theOther)

{

      ...

};


b)
Vector:: Vector (const Vector & theOther)

      ...
      *this=theOther;
}

Vector Vector::operator=(Vector& theOther)

{

      ...

};

 

c) 

String& String::operator+ (String theOther)

{

      ...

      return theOther;

}

 

d)

String& String::operator+ (String theOther)

{

      String s;

      ...

      return s;

}

 

e) 

Vector::Vector (const Vector theOther)

{

      ...

      *this=theOther;

}

 

Vector & Vector::operator=(Vector theOther)

{

      ...

};

 

 

f)

String& String::operator=(String theOther)

{

      ...

      return theOther;

}

 

g)

 

Vector & Vector::operator+ (Vector theOther)

{

      Vector s;

      ...

      return s;

}

 

h)

void String::operator=( String theOther)

{

      ...

      return *this;

};

...

String s1,s2,s3("Santa Claus");

s1=s2=s3;

 

 

i)

Complex & Complex::operator− (Complex theOther)

{

      return theOther;

}

 

 

 



2008.01.19. |  Permalink  |  Hozzászólások: 2  |  Tárgyszavak: példa szintje


5.5 .  3*3-as mátrix operátorai

Webmester felhasználó Írjunk 3*3-as mátrixokat egységbezáró osztályt!
- A mátrix egyes elemei valós számok.
- A mátrixhoz lehessen hozzáadni, belőle kivonni más 3*3-as mátrixokat, valamint más mátrixszal is össze lehessen szorozni!
- A program tagolása (.h: osztálydeklaráció, .cpp: hosszabb implementációjú függvények törzse) a C++ programozók körében elterjedt konvenciók alapján történjen, és védjük le a többszörös beépítésből eredő újradefinicióról szóló hibaüzeneteket. A tesztelő függvény is külön állományba kerüljön.
- Írjunk egy diagnosztikai függvényt, amely kiírja a tagváltozók értékét, és egy tesztelő függvényt (main), amely teszteli a konstruktorokat és a többi tagfüggvényt.
- A mátrixhoz operátorokkal lehessen hozzáadni, belőle kivonni más 3*3-as mátrixokat! Továbbá más mátrixszal lehessen összeszorozni. (operator+, operator-, operator*). A mátrix elemeit az operator()-lel lehessen lekérni (tegyük lehetővé, hogy konstans objektumok koordinátáit is le lehessen kérdezni).
- Tegyük lehetővé, hogy osztályunk beilleszkedjen a C++ I/O-ba!


2008.02.01. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


5.6 .  2D intervallumhalmaz operátorai

Webmester felhasználó Készítsünk kétdimenziós zárt intervallumot (téglalapok) egységbe záró osztályt (2DInterval), valamint ilyen típusú objektumok tárolására alkalmas osztályt (2DIntervalSet)!
- A 2DInterval osztályban implementáljuk a subtract függvényt, amely a paraméterként kapott intervallumot kivonja a már meglévőkből úgy, hogy a megmaradó intervallumok szintén téglalap alakúak legyenek (darabolás után)!
- A 2DIntervalSet osztály legyen képes tetszőleges számú 2D intervallum tárolására (koordinátákkal adott, nem fedik egymást)!
- Implementáljuk a union függvényt, amely újabb intervallumokkal egészíti ki a listát úgy, hogy amennyiben az új intervallum egy meglévővel fedésben van, megszünteti a fedést azáltal, hogy az egyik intervallumból eltávolítja a fedésben lévő részt, majd a megmaradó idomot téglalapokra bontja!
- Implementáljuk az subtract függvényt a 2DIntervalSet osztályra is!
-
Készítsük el a túlterhelt + és - operátorokat úgy, hogy azok képesek legyenek mind intervallum-intervallumhalmaz, mind intervallumhalmaz-intervallumhalmaz közti műveletvégzésre!


2008.02.01. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


5.7 .  Háromdimenziós vektor operátorai

Webmester felhasználó

Írjunk egy háromdimenziós vektor osztályt!
- Az osztály kívülről hozzáférhetően tárolja a vektor x és y értékét!
- Inicializáláskor a vektort meg lehessen adni 0, 1 vagy 2 értékkel is (ilyenkor a hiányzó értékel nullák legyenek)!
- A program tagolása (.h: osztálydeklaráció, .cpp: hosszabb implementációjú függvények törzse) a C++ programozók körében elterjedt konvenciók alapján történjen, és védjük le a többszörös beépítésből eredő újradefinicióról szóló hibaüzeneteket. A tesztelő függvény is külön állományba kerüljön.
- Írjunk egy diagnosztikai függvényt, amely kiírja a tagváltozók értékét, és egy tesztelő függvényt (main), amely teszteli a konstruktorokat és a többi tagfüggvényt.
- A vektorhoz operátorokkal lehessen hozzáadni, belőle kivonni más háromdimenziós vektorokat! Továbbá más vektorral lehessen összeszorozni (skaláris szorzat): operator+, operator-, operator* (túlterhelve vektoriális és skalásris szorzatra), operator[] (tegyük lehetővé, hogy konstans objektumok koordinátáit is le lehessen kérdezni).
- Tegyük lehetővé, hogy osztályunk beilleszkedjen a C++ I/O-ba!



2008.01.31. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


5.8 .  Multihalmaz osztály operátorai

Webmester felhasználó Készítsünk egész elemeket tartalmazó multihalmazokat reprezentáló osztályt (Multiset)! A multihalmazok és a halmazok között annyi a különbség, hogy a multihalmaz egy elemet többször is tartalmazhat. Egy elem multiplicitása azt adja meg, hogy az elem hányszor van benne a halmazban.

A multihalmazban ezúttal nem rögzítjük az elemek maximális számát. Figyeljünk az egységbezárás alapelvére, használjunk konstruktorokat és privát tagváltozókat, valamint a dinamikus adattagokat tartalmazó osztályok implementálásánál előkerülő dolgokra (destruktor, másoló konstruktor, egyenlőségoperátor)! Implementáljuk az alábbi publikus tagfüggvényeket és operátorokat!

   - operator+ (halmaz és elem között): hozzáad egy elemet a halmazhoz.
   - operator- (halmaz és elem között): csökkenti az adott elem multiplicitását, ha az nullára csökkenne, eltávolítja az elemet.
   - get: visszaadja egy elem multiplicitását, ha nincs benne, akkor nullát ad vissza
   - operator + (halmaz és halmaz között): az uniót számolja ki: az unióban az egyes elemek multiplicitásai az elem eredeti hamazokban lévő multiplicitásának összege
   - intersection: kiszámolja a multihalmazok metszetét: itt az azonos, de többször szereplő elemeket különbözőnek kell tekinteni a halmazhoz képest
   - operator =!, ==: összehasonlít két halmazt: itt is az azonos, de többször szereplő elemeket különbözőnek kell tekinteni az összehasonlításkor 
   - operator - (két multihalmaz között): kiszámolja a különbséget (itt a multiplicitások is kivonódnak, ha negatív, akkor az elem nem szerepel a különbséghalmazban)


2008.02.03. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


5.9 .  Egész Bignum operátorai

Webmester felhasználó Írjunk egész Bignum osztályt:

 - az osztály legyen képes tetszőleges méretű egész számok reprezentálására
 - tudjon alapműveleteket végezni velük (+, -, *, /)
 - támogasson parsolást (konstruálás stringből), inicializálást egész számokból illetve bájt tömbből
 - Egészítsük ki a megoldást a következő operátorok túlterhelésével:
    Operator+
    Operator-
    Operator*
    Operator/
    Tegyük lehetővé, hogy osztályunk beilleszkedjen a C++ I/O-ba!


2008.02.01. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


5.12 . megoldással  Tetszőleges osztály kiírása a standard kimenetre

Webmester felhasználó Mutassa be és illusztrállja egy rövid példával, hogyan lehet egy saját osztály (B) számára túlterhelni a << operátort annak érdekében, hogy a C++ szabványos kimenetét használhassuk! Pl: B b; cout << b;

2008.04.28. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak:


5.13 . megoldással  Komplex osztály készítése

Webmester felhasználó

Tervezzünk meg és implementáljunk egy komplex típust tároló osztályt, amely támogatja a négy aritmetikai alapműveletet a komplex számok között, illetve komplex és valós számok között, valamint képes a szabványos kimenetre kiírni magát, és a szabványos bemenetről beolvasni az adatait (az  objektum állapota csak akkor változzon, ha a beolvasás sikeres volt)!



2008.01.19. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


5.14 . megoldással  Sztring osztály készítése

Webmester felhasználó

Tervezzünk meg egy általános célú String osztályt, amely támogatja a összefűzést (+), összehasonlítást, a többszörös értékadást (s1 = s2 = s3;), az egyes karakterek elérését a [] operátorral, illetve képes együttműködni a nullterminált C sztringekkel (oda-vissza konverzió), valamint képes a szabványos kimenetre kiírni magát, és a szabványos bemenetről beolvasni az adatait!
Deklaráljuk az osztály tagváltozóit és tagfüggvényeit a fentieknek megfelelően! (implementáció nélkül)



2008.01.19. |  Permalink  |  Hozzászólások: 0  |  Tárgyszavak: példa szintje


5.15 . megoldással  Tetszőleges osztály beolvasása a standard bemenetről

Webmester felhasználó Mutassa be és illusztrállja egy rövid példával, hogyan lehet egy saját osztály (A) számára túlterhelni a >> operátort annak érdekében, hogy a C++ szabványos bemenetét használhassuk! Pl: A a; cin >> a;

2008.04.28. |  Permalink  |  Hozzászólások: 2  |  Tárgyszavak: