Í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!
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;
}
Í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!
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)!
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)