c++ obiektowo - metoda wirtualna

0

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?

1
vector<Wartosc_Liczbowa*> Tb;
Tb.push_back(new Complex);
Tb.push_back(new Liczba);

1 użytkowników online, w tym zalogowanych: 0, gości: 1