Witam,
mam zadanie o treści:
Stwórz fragment kodu, który będzie pokazywał że metoda modul() w zdefiniowanych klasach jest wirtualna. W tym celu utwórz tablicę obiektów typu bazowego (Wartość_liczbowa). Wypełnij ją wskaźnikami na obiekty klas pochodnych (rzutowanie w górę), a następnie iterując po niej wywołuj kolejno zdefiniowane postacie metody wirtualnej.
Do zadania dołączona była klasa Wartosc_Liczbowa
Utworzyłem klasy: dwie dziedziczące po niej Liczba i Complex.
#ifndef Wartosc_Liczbowa_h
#define Wartosc_Liczbowa_h
/*
tutaj piszesz cały interfejs
*/
#include <iostream>
using namespace std;
class Wartosc_Liczbowa
{
public:
virtual double modul () = 0; //wartość bezwzględna
virtual void wypisz(ostream &out) = 0;
virtual ~Wartosc_Liczbowa()
{}
};
#endif
#ifndef Liczba_h
#define Liczba_h
#include <iostream>
#include "Wartosc_Liczbowa.h"
class Liczba : public Wartosc_Liczbowa
{
double re; //czesc rzeczywista
public:
Liczba operator+(Liczba & right)
{
return Liczba (this->re+right.re);
}
double modul();
Liczba(double re);
~Liczba(void);
friend ostream & operator<< (ostream &out, Liczba &l);
void wypisz(ostream &out)
{
out<<*this;
}
};
#endif
#include "Liczba.h"
#include <iostream>
using namespace std;
Liczba::Liczba(double re)
{
cout<<"Konstruktor Liczba = "<<re<<"\n";
this->re = re;
}
Liczba::~Liczba(void)
{
cout<< "Destruktor Liczba = "<<re<<endl ;
}
double Liczba::modul()
{
if (re < 0)
return -re;
else
return re;
}
ostream & operator<<(ostream &out, Liczba &l)
{
out<<"Liczba rzeczywista: " << l.re<<"\n";
return out;
}
#ifndef Complex_h
#define Complex_h
#include "Wartosc_Liczbowa.h"
#include <ostream>
class Complex : public Wartosc_Liczbowa
{
protected:
double re;
double im; //czesc urojona
public:
~Complex(void);
Complex(double re=0,double im=0) ;
/*Complex operator +(Complex &right) {
this->re + right.re;
this->im + right.im;
return Complex(re,im);
}*/
Complex(Complex & org);
friend ostream & operator<< (ostream &out, Complex &l);
double modul();
void wypisz(ostream &out)
{
out<<*this;
}
};
#endif
#include "Complex.h"
#include <iostream>
using namespace std;
Complex::Complex(double re, double im)
{
cout<<"Konstruktor liczby:"<<re;
if(im>0) cout<<"+";
cout<<im<<"i"<<endl;
this->re = re;
this->im = im;
}
Complex::~Complex(void)
{
cout<<"Destruktor liczba:"<<re;
if(im>0) cout<<"+";
cout<<im<<"i"<<endl;
}
ostream & operator<<(ostream &out, Complex &l)
{
out<<"Czesc rzeczywista:" << l.re<<" Czesc urojona: "<< l.im<<"i"<<endl;
return out;
}
double Complex::modul()
{
return sqrt(re*re+im*im);
}
Jak to należy zrobić? Bo rozumiem że skoro klasa Wartosc_liczbowa zawiera metody czysto wirtualne to jest klasą abstrakcyjną to nie można tworzyć jej obiektów? Więc jak zrobić tablice obiektówtypu bazowego?