Znowu pisze ten post bo nie wiem dlaczego zniknął, pewnie moderator stwierdził ze juz był ale szukałem i nie znalazłem.Moze cos podobnego było.
Program prawie dział dzięki wielkiej pomocy rtp i kilku innym ale jeszcze nie zwraca stringu nie wiem dlaczego ciemna masa ze mnie [???] .Wszystko ładnie tylko suma nie zwraca stringu.
Zaimplementować wzorzec klasy tablicy 10-elementowej z kontrolą zakresu indeksu dla operatora []. Wzorzec powinien posiadać metodę suma() zwracającą sumę elementów. Sprawdzić działanie tej metody dla typów liczbowych i zaimplementować specjalną wersję dla wzorca z typem char* zwracającą string będący połączeniem elementów tablicy.
Pewnie ten post za długo nie pobedzie :). Moderator [diabel] sie nim zajmnie :-(
Oto program:
#include <iostream>
#include <string>
#include <typeinfo>
using namespace std;
template <typename TYP> class TabBaza
{
public:
TYP suma;
TYP tablica [10];
TYP operator [](int i)
{
if (i < 10) return tablica[i];
else
{
cout << "Poza tablica" << endl;
exit (0);
}
}
};
template<typename TYP> class Tab : public TabBaza<TYP>
{
public:
Tab()
{
TYP war_elem;
for (int i = 0; i < 10; i++)
{
cout << "Podaj " << i << " element tablicy: ";
cin >> war_elem;
Tab<TYP>::tablica[i] = war_elem;
}
}
TYP Suma(void)
{
{
TYP s1 = 0;
for (int i = 0; i < 10; i++) s1 += TabBaza<TYP>::tablica[i];
TabBaza<TYP>::suma = s1;
return TabBaza<TYP>::suma;
}
}
};
template<> class Tab<char*> : public TabBaza<char*>
{
public:
char suma;
Tab()
{
suma = NULL;
string war_elem;
for (int i = 0; i < 10; i++)
{
cout << "Podaj " << i << " element tablicy: ";
cin >> war_elem;
Tab<char>::tablica[i] = new char[war_elem.length()+1];
strcpy(Tab<char*>::tablica[i], war_elem.c_str());
}
}
~Tab()
{
for(int i = 0; i < 10; i++) delete[] Tab<char*>::tablica[i];
if(suma != NULL) delete[] suma;
}
char* Suma(void)
{
if(suma != NULL) delete[] suma;
unsigned int dlugosc = 0;
for(int i = 0; i < 10; i++) dlugosc += strlen(TabBaza<char*>::tablica[i]);
suma = new char[dlugosc+1];
suma[0] = '\0';
for(int l = 0; l < 10; l++) strcat(suma, TabBaza<char*>::tablica[i]);
return suma;
}
};
int main(int argc, char* argv[])
{
Tab <char*> t;
cout << "Suma: " << t.Suma() << endl ;
cin.get();
getchar();
return 0;
};