Klasy, zadanie

0

Mam takie zadanie:

  1. Wczytac wartosci z plikow
  2. Zaalokawac na to tablice dynamicnzie
  3. Klasa X, ktora przechowuje taka tablice (statycznie) + wynik =sume jej elementow
  4. Klasa X2, dziedziczy po X, wynik = suma i^2
  5. Klasa X3, dziedzziczy po X, wynik = suma i^3
  6. Klasa X2X3, dziedzicz po X2 i X3, wynik=suma i^4
  7. Tablica 4-elementowa, po jednym obiekcie kazdej klasy
  8. Wyswietlic na ekranie sume wynikow z tych 4 obiektow

1 i 2 rozkminiłem w ten sposób:

 
        string linia;
	fstream plik;
	int liczba = 0;
	plik.open("plik.txt", ios::in);
	int *tablica = new int[100];
	int i = 0;
	while (!plik.eof())
	{
		getline(plik, linia);
		liczba = stoi(linia);
		tablica[i] = liczba;
		i++;
	}

Pytania:
a) Jak zrobić podpunkt 3??
b) Czy dobrze zrobiłem alkowowanie tablicy dynamicznej? Chodzi o to że w pliku nawet jak usunę wartości albo dodam x nowych to i tak powinien program działać.

1

a) Napisać klasę, byle kurs rozdział kasy
b) To nie jest dynamicznie, albo użyj vector albo skopiuj jego podstawowe działanie.

0

wykładowca mówił że ma być to tablica

0

jak to skopiować ?

3
#include <iostream>
#include <algorithm>
#include <numeric>
#include <vector>
#include <iterator>
#include <memory>
using namespace std;

int ipow(int base, int exp){
    int result = 1;
    while(exp){
        if (exp & 1)
            result *= base;
        exp >>= 1;
        base *= base;
    }
    return result;
}

template<typename T>
struct producer{
	using result_type = T;
	virtual result_type produce() const = 0;
    virtual ~producer(){};
};

using int_producer = producer<int>;

struct x: int_producer{
	using data_type = int;
	using data_container = vector<data_type>;
	const data_container &data;
	
	x(const data_container &dc): data(dc){}
	
	virtual data_type produce() const override
	{ return accumulate(begin(data), end(data), 0); }
};

struct x2: virtual x{
	x2(const x::data_container &dc): x(dc){}
	
	virtual x::data_type produce() const override
	{ return ipow(x::produce(), 2); }
};

struct x3: virtual x{
	x3(const x::data_container &dc): x(dc){}
	
	virtual x::data_type produce() const override
	{ return ipow(x::produce(), 3); }
};

struct x2x3: x2, x3{
	x2x3(const x::data_container &dc): x(dc), x2(dc), x3(dc){}
	
	virtual x::data_type produce() const override
	{ return ipow(x::produce(), 4); }
};

int main() {
	vector<int> data{ istream_iterator<int>(cin),
					  istream_iterator<int>() };
	
	unique_ptr<int_producer> producers[] = {
		make_unique<x>(data),
		make_unique<x2>(data),
		make_unique<x3>(data),
		make_unique<x2x3>(data)
	};
	
	for(auto &producer: producers){
		cout << producer->produce() << endl;
	}
	return 0;
}
in out
1
2
3

|

6
36
216
1296

http://melpon.org/wandbox/permlink/TXg8yrKbexfJinGV

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