Baza danych studentów
class BazaDanych {
Student m_baza_danych[10];
...
}
Klasa BazaDanych przechowuje tablice 10 obiektów statycznych klasy Student.
Studenci to obiekty statyczne w bazie danych - oznacza to tyle, że w chwili stworzenia obiektu klasy BazaDanych zostaje stworzonych 10 obiektów statycznych klasy Student.
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
BazaDanych baza;
}
Klasa BazaDanych przechowuje tablice 10 obiektów statycznych klasy Student.
Studenci to obiekty statyczne w bazie danych - oznacza to tyle, że w chwili stworzenia obiektu klasy BazaDanych zostaje stworzonych 10 obiektów statycznych klasy Student.
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
BazaDanych baza;
}
Zobaczmy co się stanie jeśli zawołamy metodę DodajStudenta
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
BazaDanych baza;
baza.DodajStudenta();
}
//wpisywanie danych nowego studenta do bazy
void BazaDanych::DodajStudenta()
{
if(m_ilosc<10)
{
cout << "Wprowadz dane studenta o numerze rekordu " << m_ilosc << "\n";
m_baza_danych[m_ilosc].PobierzDane();
m_ilosc++;
}
else
{
cout << "Baza danych jest pełna! \n";
}
}
void Student::PobierzDane ()
{
cout << "Podaj imie: ";
//cin reprezentuje klawiature
// >> przepycha teksty wpisane na klawiaturze do zmiennej (szuflady) m_imie
cin >> m_imie;
cout << "Podaj nazwisko: ";
cin >> m_nazwisko;
cout << "Podaj rok: ";
cin >> m_rok;
}
A co się stanie jeśli zawołamy metodę DodajStudenta drugi raz?
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
BazaDanych baza;
baza.DodajStudenta();
baza.DodajStudenta();
}
//wpisywanie danych nowego studenta do bazy
void BazaDanych::DodajStudenta()
{
if(m_ilosc<10)
{
cout << "Wprowadz dane studenta o numerze rekordu " << m_ilosc << "\n";
m_baza_danych[m_ilosc].PobierzDane();
m_ilosc++;
}
else
{
cout << "Baza danych jest pełna! \n";
}
}
void Student::PobierzDane ()
{
cout << "Podaj imie: ";
//cin reprezentuje klawiature
// >> przepycha teksty wpisane na klawiaturze do zmiennej (szuflady) m_imie
cin >> m_imie;
cout << "Podaj nazwisko: ";
cin >> m_nazwisko;
cout << "Podaj rok: ";
cin >> m_rok;
}
Co by było gdybyśmy przechowywali tablicę wskaźników do Studentów?
class BazaDanych {
Student* m_baza_danych[10];
...
}
Klasa BazaDanych przechowuje tablice 10 wskaźników do obiektów klasy Student (kartek z adresami obiektów klasy Student).
W chwili stworzenia obiektu klasy BazaDanych zostaje stworzonych 10 kartek z adresami
(10 wskaźników).
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
BazaDanych baza;
}
W chwili stworzenia obiektu klasy BazaDanych zostaje stworzonych 10 kartek z adresami
(10 wskaźników).
ale nie są jeszcze tworzone żadne obiekty klasy Student
Trzeba dopisać konstruktor w klasie BazaDanych, w którym stworzymy 10 obiektów klasy student
//wpisywanie danych nowego studenta do bazy
void BazaDanych::BazaDanych()
{
m_baza_danych = new Student[10];
}
Teraz, konstruktor tworzy 10 obiektów klasy Student, i przechowuje ich wskaźniki (adresy)
w tablicy m_baza_danych.
Co jeszcze należy zmodyfikować w programie?
//wpisywanie danych nowego studenta do bazy
void BazaDanych::DodajStudenta()
{
if(m_ilosc<10)
{
cout << "Wprowadz dane studenta o numerze rekordu " << m_ilosc << "\n";
m_baza_danych[m_ilosc]->PobierzDane();
m_ilosc++;
}
else
{
cout << "Baza danych jest pełna! \n";
}
}
Teraz
m_baza_danych[m_ilosc]
to wskaźnik do obiektu klasy Student
Ze wskaźnika do obiektu przechodzimy z pomocą strzałki
m_baza_danych[m_ilosc]->
Trzeba więc wszędzie gdzie zaglądamy do tablicy studentów dopisać strzałki