Commit bc93a041 by Szeberényi Imre

Skeleton

parent 7bfa7928
**NHF 3 - Skeleton**
A házi feladat 3. feltöltési határidejére el kel készíteni az osztályok deklarációját illetve minden olyan függvényt deklarálni kell, ami a főbb algoritmusok vezérléséhez, meghívásához szükséges, valamint a tesztprogram vázát.
Ebben a tervezési fázisban az interfészekre kell koncentrálni, azaz arra, hogy a külvilág mit lát egy adott objektumból/függvényből, ezért a belső részleteket nem kell megvalósítani. (A függvények törzse üres maradhat, az osztályok privát adatai elhagyhatók.)
A részfeladat ellenőrzéséhez fel kell tölteni a JPorta rendszerbe olyan nem végleges tesztprogramot, ami a megtervezett osztályokat használva bemutatja azok kapcsolatát, együttműködését. A feltöltött forráskódnak szintaktikailag helyesnek kell lennie, de nem kell érdemben működnie.
A JPorta rendszer csak a fordítást ellenőrzi (nem linkel, nem futtat),
így a (tag)függvények törzse teljesen hiányozhat!
Csak forrásprogramot (\*.cpp, \*.h, \*.hpp) csomagoljon a ZIP fajlba! **Ne legyen a ZIP-ben alkatalogus**!
**Megjegyzések:**
- A CodeBloks legegyszerűbben úgy vehető rá, hogy a *build* parancsra ne linkeljen, hogy *Project build options -> Linker settings -> Other linker options* ablakába egy **-c** kapcsolót kell beírni. Ennek hatására a linker ugyan elindul, de nem készít futtatható fájlt. A letölthető minta project fájljában (*gen_array3.cbp*) ezt beállítottuk.
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="gen_array3" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="Debug">
<Option output="bin/Debug/ctor_dtor" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Debug/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-g" />
</Compiler>
</Target>
<Target title="Release">
<Option output="bin/Release/ctor_dtor" prefix_auto="1" extension_auto="1" />
<Option object_output="obj/Release/" />
<Option type="1" />
<Option compiler="gcc" />
<Compiler>
<Add option="-O2" />
</Compiler>
<Linker>
<Add option="-s" />
</Linker>
</Target>
</Build>
<Compiler>
<Add option="-pedantic" />
<Add option="-std=c++11" />
<Add option="-Wfatal-errors" />
<Add option="-Wall" />
</Compiler>
<Linker>
<Add option="-c" />
</Linker>
<Unit filename="gen_array3.hpp" />
<Unit filename="gen_array3_main.cpp" />
<Extensions>
<code_completion />
<envvars />
<debugger />
<lib_finder disable_auto="1" />
</Extensions>
</Project>
</CodeBlocks_project_file>
/**
* \file gen_array3.hpp
*
* Generikus tmb interfsz
* Jporta "NHF 3. - skeleton" feladatnak bemutatshoz.
*
* Feladat:
* Fix mret Generikus tmb megvalstsa.
*/
/// Tmb sablon
/// @param T - adattpus
/// @param s - mret, defalult: 50
/// @param E - hibaosztly (indexelsi hiba esetn hvdik) defalul: std::range_error
template <class T, int s = 50, class E = std::range_error>
class Array { // osztlysablon
// private adattagok, tagfggvnyek az interfeszen nem ltszanak,
// ezrt ezeket a tervezs ezen fzisban nem adjuk meg.
public:
/// Indexels.
/// @param i - index
/// @return - referencia az adott index elemre
/// @return - hibs indexrtk esetn E() kivtelt dob
T& operator[](int i);
/// Indexels konstans fggvnye.
/// @param i - index
/// @return - referencia az adott index elemre
/// @return - hibs indexrtk esetn E() kivtelt dob
const T& operator[](int i) const;
};
/**
* \file gen_array3_main.cpp
*
* Egyszerű tesztprogram a Jporta "NHF 3. Skeleton" feladatának bemutatásához.
*
* Feladat:
* Fix méretű Generikus tömb megvalósítása.
* A tesztprogramnak az interfész bemutatásakor még nem kell működnie, csak fordulnia kell.
* Itt egy kicsit részletesebben adjuk meg a tesztprogramot, hogy ötletet adjunk a teszteléshez.
* A teszteléshez kézenfekvőnek tűnhet template függvény használata.
*/
#include <iostream>
#include <stdexcept>
#include <string>
#include "gen_array3.hpp" // sablon
using std::cin;
using std::cout;
using std::cerr;
using std::endl;
using std::string;
/// Saját kivételosztály a teszthez.
class BajVan {
public:
/// @param - nem használjuk semmire
BajVan(const string&) {}
};
/// TESZT 1.
void test_1() {
Array<int> arr; // default (50) elemű int tömb
int idx;
int val;
cout << "default (50) elemu int tomb" << endl;
while ( cin >> idx >> val) {
arr[idx] = val;
cout << "arr[" << idx << "]=" << arr[idx] << endl;
}
}
/// TESZT 2
void test_2() {
Array<double, 100> arr; // 100 elemű double tömb
int idx;
double val;
cout << "100 elemu double tomb" << endl;
while ( cin >> idx >> val) {
arr[idx] = val;
cout << "arr[" << idx << "]=" << arr[idx] << endl;
}
}
/// TESZT 3
void test_3() {
Array<string, 11, BajVan> arr; // 11 elemű sztring saját kivétellel
int idx;
string val;
cout << "11 elemu sztring saját kivetellel" << endl;
while ( cin >> idx >> val) {
arr[idx] = val;
cout << "arr[" << idx << "]=" << arr[idx] << endl;
}
}
/// Főprogram a standard inputról olvas egy egész számot, majd
/// meghivja az annak megfelelő tesztesetet.
/// A további inputot és outputot a teszteset kezeli.
int main() {
try {
int nr;
cin >> nr; // hanyadik teszt eset
switch (nr) {
case 1:
test_1(); // default (50) elemű int tömb
break;
case 2:
test_2(); // 100 elemű double tömb
break;
case 3:
test_3(); // 11 elemű sztring saját kivételosztállyal
break;
}
// kivétel elkapása
} catch (std::exception& e) {
cerr << e.what() << endl;
} catch (BajVan&) {
cerr << "Sajat kivetel jott" << endl;
} catch (...) {
cerr << "*** Nagy baj van! ****" << endl;
}
return 0;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment