Dynamické vytváranie objektov
Definujte triedu Tovar s 1 atribútom (pocet) a 1 metódou (ExpedujTovar()). Definujte statické a dynamické pole tovarov.
#include <iostream>
using namespace std;
class Tovar
{
int pocet;
public:
Tovar(int p = 0){
pocet = p;
}
void ExpedujTovar() {
// vykonaj procedúru expedície tovaru k zákazníkovi
cout << "Expedujem tovar ... " << endl;
}
};
void Expeduj(Tovar* t){
for(int i=0; i<20; i++)
t[i].ExpedujTovar();
}
int main()
{
Tovar Sklad1[20]; // pole 20 tovarov statické
Expeduj(Sklad1);
Tovar Sklad2[3] = { Tovar(5), Tovar(10), Tovar(15)}; // pole 3 tovarov
Expeduj(Sklad2);
Tovar *pSklad = new Tovar[10]; // pole 10 tovarov dynamické
// ďalšia činnosť
delete[] pSklad;
return 0;
}
Príklad 5.2 Modifikujte príklad 3.3 tak, aby ste použili pre prácu s reťazcom triedu string.
#include <iostream>
#include <string>
using namespace std;
class osoba
{
private:
int vek;
float plat;
string meno; //atributy
protected:
public :
osoba(string meno, int vek) { //inline parametricky konstruktor
this->plat = 0;
this->vek = vek;
this->meno = meno;
}
void vypis() { //metoda
cout << "Zamestanec " <<this->meno << " vek "<< this->vek<<endl ;
cout << "Vyska platu " << this->plat<< endl;
}
void zvys_plat(float hodnota){ //metoda
this->plat += hodnota ;
}
~osoba(){ // destruktor
cout << "destruktor"<< endl;
}
osoba(osoba& clovek){ //copy konstruktor
this->plat = clovek.plat;
this->vek = clovek.vek;
this->meno = clovek.meno + "COPY";
}
string GetMeno(){ // pristupova metoda
return this->meno;
}
};
void funkcia(osoba x) // globalna funkcia, parameter hodnotou
{
x.vypis();
}
main()
{
osoba X("Katka", 20);
X.vypis(); // Katka 20
osoba *pX;
pX = new osoba(X);
pX->zvys_plat(15000);
pX->vypis(); // KatkaCOPY
delete pX;
osoba Y("Karol",30);
Y.vypis(); // Karol 30
funkcia(Y); // KarolCOPY
return 0;
}
Príklad 5.3 Načítajte textový súbor do pamäti. Použitie preddefinované triedy string a vector.
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main(){
vector<string> v;
ifstream in("subor.txt");
string riadok;
while (getline(in, riadok))
v.push_back(riadok); // vlozenie riadku do pola
// vypis cisla riadku a jeho obsah
for(int i=0; i < v.size(); i++)
cout << i << ": " << v[i] << endl;
}
Príklad 5.4 Spočítajte výskyt zadaného slova v textovom súbore. Použitie preddefinované triedy string a vector.
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main(){
vector<string> words;
ifstream in("vyskyt.cpp");
string word;
int pocet = 0;
while (in >> word)
words.push_back(word); // nacitanie suboru po slovach
for(int i=0; i < words.size(); i++)
if (words[i] == "#include") // hladane slovo v subore
pocet++;
cout << pocet << endl;
objektu triedy Matica a vektora.
#include <iostream>
#include <vector>
using namespace std;
class Matica{
int m[2][3];
public:
Matica(){ // konštruktor inicializuje maticu typu 2x3
for(int i = 0; i < 2; i++)
for (int j = 0; j < 3; j++)
m[i][j] = i + j + 1;
}
int getPrvok(int i, int j){
return m[i][j];
}
void setPrvok(int i, int j){
m[i][j]= i+j;
}
};
vector<int> nasob(Matica& m, vector<int>& v){
vector<int> vysledok;
for(int i = 0; i < 2; i++)
vysledok.push_back(0); // nulovanie vektora pre vysledok nasobenia
for(i = 0; i < 2; i++)
for (int j = 0; j < 3; j++) // nasobenie matice m a vektora v
vysledok[i] += m.getPrvok(i,j) * v[j];
return vysledok;
}
int main()
{
Matica m; // objekt triedy Matica
vector<int> v; // vektor v
for(int i = 0; i < 2; i++)
v.push_back(i + 1); // inicializacia vektora v = [ ]
vector<int> r;
r = nasob(m,v); // nasobenie matice typu 2x3 vektorom 3
for(i = 0; i < 2; i++)
cout << r[i] << " " ; // vypis vysledku nasobenia r = [ ]
}