Cześć, jestem przy polimorfizmie. Dostałem od wykładowcy zadanie zaprogramować w C++ proste tak jakby radio. I funkcja info w klasie Radio ma byc niepubliczna, a w klasie RadioCD publiczna i samo w zależności od typu Radio lub RadioCD ma wybierać czy pokazać info z RadioCD czy z Radio. Jakby mógł ktoś zerknąć to będę wdzięczny :p Problem polega na tym że b.wyswietl() kompletnie nic nie pokazuje, jest tylko wyświetlone cout<<a; :D
#include<iostream>
#include<string>
using namespace std;
class Radio
{
protected:
string producent;
int rozmiarpamieci, stacja;
float *pamiec = new float[rozmiarpamieci];
bool wlaczone;
virtual void info()
{
if (wlaczone == 0)
cout << "Radio jest wylaczone" << endl;
else
cout << stacja << ". " << pamiec[stacja] << "FM" << endl;
}
public:
Radio(string p, int rp);
Radio(Radio &A);
~Radio();
void wylacz();
void wlacz();
void ustawstacje(int s);
void zapamietajstacje(int s, float c);
void wyswietl();
void operator [] (int a);
void operator +(float a);
void operator ++();
void operator --();
friend ostream& operator <<(ostream& a, Radio& b);
string zwrocproducenta();
};
class RadioCD :public Radio
{
int ileUtworow, nrUtworu;
public:
RadioCD(string p, int rp);
RadioCD(Radio& a);
void wlozPlyte(int a);
void wyjmijPlyte();
virtual void info();
};
int main()
{
Radio a("sharp", 10);
RadioCD b(a);
a.wlacz();
a.zapamietajstacje(0, 103.6);
a.zapamietajstacje(1, 108.0);
a.zapamietajstacje(2, 89.3);
a.ustawstacje(0);
a + 104.0;
cout << a;
b.wlozPlyte(5);
b.wyswietl();
system("pause");
return 0;
}
Radio::Radio(string p, int rp)
{
producent = p;
rozmiarpamieci = rp;
stacja = 0;
for (int i = 0; i < rozmiarpamieci; i++)
{
pamiec[i] = 0;
}
wlaczone = 0;
}
Radio::Radio(Radio &A) :Radio(A.producent, A.rozmiarpamieci)
{}
void Radio::wylacz()
{
wlaczone = 0;
}
void Radio::wlacz()
{
wlaczone = 1;
}
Radio::~Radio()
{
wylacz();
}
void Radio::ustawstacje(int s)
{
if (s<0 || s>rozmiarpamieci)
cout << "Zly numer stacji" << endl;
else
stacja = s;
}
void Radio::zapamietajstacje(int s, float c)
{
if (s<0 || s>rozmiarpamieci)
cout << "Zly numer stacji" << endl;
if (c<83.0 || c>108.0)
cout << "Zla czestotliwosc" << endl;
else
pamiec[s] = c;
}
void Radio::wyswietl()
{
if (wlaczone == 1)
info();
}
void Radio::operator [] (int a)
{
if (a > rozmiarpamieci || a < 0)
cout << "Zly indeks" << endl;
else
cout << pamiec[a] << endl;
}
void Radio::operator +(float a)
{
for (int i = 0; i < rozmiarpamieci; i++)
{
if (i > rozmiarpamieci)
cout << "Koniec pamieci" << endl;
else
if (pamiec[i] == 0)
{
pamiec[i] = a;
break;
}
}
}
void Radio::operator ++()
{
if (stacja++ > rozmiarpamieci)
ustawstacje(0);
else
ustawstacje(stacja++);
}
void Radio::operator --()
{
if (stacja-- < 0)
ustawstacje(10);
else
ustawstacje(stacja--);
}
ostream& operator <<(ostream& a, Radio& b)
{
a << b.zwrocproducenta() << endl;
for (int i = 0; i < b.rozmiarpamieci; i++)
{
a << b.pamiec[i] << endl;
}
return a;
}
string Radio::zwrocproducenta()
{
return producent;
}
RadioCD::RadioCD(string p, int rp) :Radio(p, rp)
{
ileUtworow = 0;
nrUtworu = 0;
}
void RadioCD::wlozPlyte(int a)
{
ileUtworow = a;
nrUtworu = 1;
}
void RadioCD::wyjmijPlyte()
{
if (ileUtworow != 0)
{
ileUtworow = 0;
nrUtworu = 0;
}
}
void RadioCD::info()
{
cout << nrUtworu << endl;
}
RadioCD::RadioCD(Radio& a) :Radio(a)
{
}