Overerving

Status
Niet open voor verdere reacties.

Myclos81

Gebruiker
Lid geworden
17 nov 2007
Berichten
157
Ik heb een klasse Container waar ik een dynamische tabel opvul via de functie voegToe.
Dan moet ik een subklasse Histogram waar er per keer een waarde voorkomt een x moet gezet worden maar dat is bijkomstig.

Wat er mij niet lukt is tijdens het initialiseren van een object op basis van de subklasse Histogram, de waarden van de tabel te behouden die ik via de functie voegToe van de klasse Container opgevuld heb...

Kan er mij iemand helpen ?

Hier is de code

#include <iostream>
#include <string>
using namespace std;

class Container;
class Histogram;

class Container
{
protected:
unsigned maxAantal; // max aantal getallen
int aantal; // huidig aantal getallen
int *p; // pointer naar dynamische array met getallen
public:
Container()
{
}
Container(int max) // constructor
: maxAantal(max), p(new int[max])
{
for( int li_i = 0; li_i < maxAantal; li_i++)
{
p[li_i] = 0;
}
}

Container(const Container & ix) // copy constructor
: maxAantal(ix.maxAantal), p(new int[maxAantal])
{
for( int li_i = 0; li_i < maxAantal; li_i++)
{
p[li_i] = ix.p[li_i];
}
}

Container & operator=(const Container & ix); // toekenningsoperator

~Container() // destructor
{
delete [] p;
}
void voegtoe(int a); // voeg element a aan Container toe
int zoek(int a); // onderzoek of a in Container voorkomt
void print();
void setAantal(int a)
{
aantal = a;
}
};

class Histogram: public Container
{
// Histogram()
// {
// }
public:
void print();
};

void Container::voegtoe(int a)
{
for(int li_i = (aantal); li_i < (aantal+a); li_i++)
{
cout << "Geef het " << (li_i+1) << "e getal in: " << endl;
cin >> p[li_i];
}

int li_hulp;
aantal += a; // attribuut kan hier zomaar veranderd worden zonder setter??
for(li_i = (aantal-1); li_i > 0; li_i--)
{
if(p[li_i] < p[li_i-1])
{
li_hulp = p[li_i-1];
p[li_i-1] = p[li_i];
p[li_i] = li_hulp;
}
}
}

Container::zoek(int a)
{
int teller = 0;
for(int li_i = 0; li_i < maxAantal; li_i++)
{
if(p[li_i] == a)
{
teller++;
}

}

return teller;

}

void Container::print()
{
for(int li_i = 0; li_i < aantal; li_i++)
{
cout << p[li_i] << endl;
}

}

void Histogram::print()
{
//p = new int[maxAantal];
string x = "";
int li_hulp;
cout << "lalala" << endl;

for(int li_i = 0; li_i < aantal; li_i++)
{
li_hulp = p[li_i];
for(int li_j = 0; li_j < aantal; li_j++)
{
if(p[li_j] == li_hulp)
{
x += "x";
}
}
cout << (li_i+1) << x << endl;
}

}

Container & Container::operator=(const Container & ix) // toekenningsoperator
{
delete []p;
aantal = ix.aantal;
p = new int[aantal];
for(int li_i = 0; li_i < maxAantal; li_i++)
{
p[li_i] = ix.p[li_i];
}
return *this;
}

int main()
{
Container o_getallen(10);

o_getallen.setAantal(0);
o_getallen.voegtoe(5);
o_getallen.print();
o_getallen.voegtoe(1);
o_getallen.print();
o_getallen.voegtoe(1);
o_getallen.print();

int li_zoekGetal = 0,
li_zoekAantal = 0;
cout << "Welk getal wil je zoeken? " << endl;
cin >> li_zoekGetal;
li_zoekAantal = o_getallen.zoek(li_zoekGetal);

cout <<"Het getal komt " << li_zoekAantal << " maal voor " << endl;

Container o_get(10);

Histogram o_histogram;

o_histogram = o_getallen;

o_histogram.print();

return 0;
}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan