#include <iostream>
#include <vector>
#include <memory>

class Building {
  public:
	virtual int getPower() = 0;
	virtual int getWater() = 0;
	virtual ~Building() {}
};

class IceWell : public Building {
  public:
	virtual int getPower() {return -100;}
	virtual int getWater() {return 50;}
};

class SolarArray : public Building {
  public:
	virtual int getPower() { return 150; }
	virtual int getWater() { return 0; }
};

int main()
{
	std::vector<std::shared_ptr<Building>> inventory;
	inventory.emplace_back(new IceWell);
	inventory.emplace_back(new SolarArray);
	inventory.emplace_back(new IceWell);
	inventory.emplace_back(new SolarArray);

	int total_power = 0;
	int total_water = 0;
	for (auto building : inventory)
	{
		total_power += building->getPower();
		total_water += building->getWater();
	}
	
	std::cout << "Total power: " << total_power << "\n";
	std::cout << "Total water: " << total_water << "\n";
	
	return 0;
}