Základy tried
#include <iostream>
using namespace std;
/**
* Trieda reprezentujúca študenta
*/
class Student {
private:
/**
* Private člen/atribút triedy pre meno.
* Chceme aby ak raz sa vyplní tak bol nemenný.
*/
string name;
/**
* Private člen/atribút triedy pre vek.
* Môže sa meniť v čase.
*/
int age;
public:
/**
* defaultný konštruktor
* Potrebný ak chceme vytvoriť objekt bez hodnôt v atribútoch.
*/
Student() = default;
/**
* Konštruktor len s inicializáciou mena.
* @param n meno študenta
*/
Student(const string &n) : name{n} {}
/**
* Konštruktor pre nastavenie oboch atribútov triedy.
* @param n meno študenta
* @param a vek študenta
*/
Student(const string &n, const int a)
: name{n}, age{a} {}
/**
* Získanie mena študenta.
* @return meno študenta
*/
string get_name() {
return name;
}
/**
* Nastavenie mena študenta.
* Meno študenta je nastavené jedine vtedy ak ešte v minulosti nastavené nebolo,
* t.j. ak objekt bol inicializovaný bez mena.
* Ak meno študenta už má hodnotu, vstup metódy je ignorovaný.
* @param name nové meno študenta
*/
void set_name(const string &name) {
if (Student::name == "") { // každý string je defaultne inicializovaný na prázdny, t.j. ""
Student::name = name;
}
}
/**
* Získanie veku študenta.
* @return vek študenta
*/
int get_age() const {
return age;
}
/**
* Nastavenie veku študenta
* @param age nový vek študenta
*/
void set_age(int age) {
Student::age = age;
}
/**
* Serializácia objektu študent do typu string.
* Metóda vhodná pre potreby výpisu, či uloženie do súboru.
* @return serialozovaný objekt študenta
*/
string to_string() {
return "Student{name:" + name + ", age:" + std::to_string(age) + "}";
}
};
int main() {
Student milan; // použitý defaultný konštruktor
Student jano("Jano"); // použitý konštruktor iba s menom
Student magda("Magda", 25); // použitý konštruktor s oboma atribútami
milan.set_name("Milan");
milan.set_age(33);
cout << milan.to_string() << endl;
jano.set_name("Martin"); // meno sa už nezmení nakoľko objekt jano už mená má
cout << jano.to_string() << endl;
return 0;
}
Tento program demonštruje základné princípy objektovo orientovaného programovania v C++, ako sú definícia triedy, vytváranie objektov a interakcia s používateľom prostredníctvom konzolového vstupu a výstupu.
Trieda Student
Atribúty:
name
(typstring
): Meno študenta, ktoré môže byť nastavené len raz (nemenné po inicializácii).age
(typint
): Vek študenta, ktorý môže byť meniaci sa.
Konštruktory:
- Defaultný konštruktor:
Umožňuje vytvorenie objektuStudent
bez inicializácie atribútov. - Konštruktor s menom:
Inicializuje atribútname
. - Konštruktor s menom a vekom:
Inicializuje oba atribútyname
aage
.
- Defaultný konštruktor:
Metódy:
string get_name()
:
Vráti meno študenta.void set_name(const string &name)
:
Nastaví meno študenta iba v prípade, že zatiaľ nebolo nastavené (kontroluje prázdny reťazec). Zabezpečuje nemennosť mena po prvom nastavení.int get_age() const
:
Vráti aktuálny vek študenta.void set_age(int age)
:
Nastaví nový vek študenta.string to_string()
:
Serializuje údaje študenta do reťazca v tvare:"Student{name:<meno>, age:<vek>}"
Táto metóda je vhodná na výpis alebo ukladanie údajov.
Dôležité vlastnosti:
Zapuzdrenie:
Atribútyname
aage
sú súkromné, prístup k nim je riadený verejnými metódami.Kontrola nemennosti mena:
Atribútname
môže byť nastavený iba raz a následné pokusy o zmenu sa ignorujú.Serializácia:
Metódato_string()
umožňuje jednoduchý výpis alebo uloženie údajov o študentovi.