@Retr0Hacker

Как создать массив указателей на объекты базового класса, которым присвоить адреса объектов производных класса?

задача по наследованию: "Создать базовый класс ПЕЧАТНАЯ ПРОДУКЦИЯ (задаются название, количество страниц). Создать производные классы КНИГА (задаются данные об авторе, размере страницы, количестве экземпляров) и ЖУРНАЛ (задаются размер страницы, количество экземпляров, периодичность выхода). Для введенных данных о печатной продукции вычислить расходы бумаги (в кв. м.) – для каждого примера и суммарные, отсортировать эти примеры по убыванию издержек. Для проверки использовать массив указателей на объекты базового класса, которым присвоить адрес объектов производных классов."

Вопрос:
Как реализовать ввод и вывод всех необходимых мне данных.

Ну то есть, вот вывод кода в main():
62571fa22ca7b022514605.png
По моей задумке, после каждой введенной цифры должны сперва вводится мной с компа и потом выводится с помощью виртуальной ф-ции print() все необходимые мне данные. Вот как сделать ввод и потом вывод этих даных?

#include <iostream>
#include <string>

using namespace std;

class DRUK
{
protected:
	string m_name;
	int m_pages;
public:
	DRUK(const string& name = "", double _pages = 0) : m_pages(_pages), m_name(name) {}
	const string& getName() const
	{
		return m_name;
	}
	int getPages() const
	{
		return m_pages;
	}

	virtual void print()const
	{
		cout << "Название: " << m_name << "\n";
		cout << "Кол-во стораниц: " << m_pages << "\n";
	}
};

class BOOK : public DRUK
{
private:
	string m_author;
	int m_sizeofPages;
	int m_countofPrimir;
public:
	BOOK(const string& name = "", double _pages = 0,
		const string& author = "", double size = 0, double primir = 0)
		: DRUK(name, _pages), m_author(author), m_sizeofPages(size), m_countofPrimir(primir)
	{

	};
	const string& getAuthor() const{return m_author;}
	int getSize() const{return m_sizeofPages;}
	int getCount() const{return m_countofPrimir;}

	virtual void print()const override
	{
		DRUK::print();
		cout << "Автор: " << m_author << "\n" <<
				"Розмер страниц: " << m_sizeofPages << "\n" <<
				"Кол-во экземпляров: " << m_countofPrimir << "\n";
	}
};

class JURNAL : public DRUK
{
private:
	int m_SizeOfPages;
	int m_CountOfPrimir;
	int m_period;
public:
	JURNAL(const string& name = "", double _pages = 0,
		double _size = 0, double _primir = 0, double _period = 0)
		: DRUK(name, _pages), m_SizeOfPages(_size), m_CountOfPrimir(_primir), m_period(_period)
	{

	};
	
	int getSizeOfPages() const { return m_SizeOfPages; }
	int getCountOfPrimir() const { return m_CountOfPrimir; }
	int getPeriod() const { return m_period; }

	virtual void print()const override
	{
		DRUK::print();
		cout << "Розмер страниц: " << m_SizeOfPages << "\n" <<
				"Кол-во экземпляров: " << m_CountOfPrimir << "\n" <<
				"Период вихода: " << m_period << "\n";
	}
};

const ostream& operator<< (ostream& out, const DRUK& druk)
{
	druk.print();
	return out;
}


int main() {

	system("chcp 1251");
	int count;
	cout << "Введите кол-во печатной продукции: ";
	cin >> count;
	DRUK** totalDRUK = new DRUK*[count];

	for (int i = 0; i < count; ++i) {
		std::cout << "Item number " << i + 1 << " is a (1. BOOK/ 2. JURNAL): ";
		char choise;
		std::cin >> choise;
		switch (choise)
		{
		case '1': totalDRUK[i] = new BOOK;
			break;
		case '2': totalDRUK[i] = new JURNAL;
			break;
		default:
			--i;
			cout << "Invalid choise!" << endl;
			break;
		}
	}
	return 0;
}
  • Вопрос задан
  • 489 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы