Im folgenden Programm habe ich versucht ein dynamisches Array zu erstellen ...
Der aufruf der Klasse mit dem . Operator ist kein Problem, doch was muss ich ändern um es als Zeiger benutzen zu können ergo einen aufruf via
Der aufruf der Klasse mit dem . Operator ist kein Problem, doch was muss ich ändern um es als Zeiger benutzen zu können ergo einen aufruf via
Code:
d->set(0,ax,0,ay);
Code:
#include "stdafx.h"
#include <iostream>
#include <cstring>
using namespace std;
class zweidim
{
private:
double **d;
size_t ax, ay;
public:
zweidim(int Zeilen=1, int Spalten=1)
{
ax = Zeilen;
ay = Spalten;
if(ax>0&&ay>0)
{
d = new double*[ax];
for(size_t co=0; co<ax; co++)
{
d[co] = new double[ay];
}
for(size_t i=0;i<ax;i++)
{
for(size_t n=0;n<ay;n++)
{
d[i][n]=0.0;
}
}
}
else
{
cout<<"Falsche Eingabe "<<ax<<","<<ay<<"\n";
d = NULL;
}
}
double *& operator[] (size_t ax)
{
return d[ax];
}
/* ~zweidim()
{
int i;
for (i = 0; i < ax; i++)
delete [] d[i];
delete [] d;
}*/
~zweidim() {
if(d != NULL) {
for(size_t i=0; i < ax; i++)
if(d[i] != NULL) {
delete d[i];
d[i] = NULL;
}
delete [] d;
d = NULL;
}
}
double summe(size_t ax0=0, size_t ax1=0,size_t ay0=0,size_t ay1=0)
{
double summe=0;
size_t temp;
//Testumgebung für alle Funktionen -> könnten auch als Funktion definiert werden ...
//test ob ax/y0 > ax/y1
if(ax0>ax1)
{
temp=ax0;
ax0=ax1;
ax1=temp;
}
if(ay0>ay1)
{
temp=ay0;
ay0=ay1;
ay1=temp;
}
//test ende
//Testen ob ay1|ax1 > this->ax/ay
if(ax1>=this->ax)
{
ax1=(this->ax)-1; //Klammern dienen nur der optik
}
if(ay1>=this->ay)
{
ay1=(this->ay)-1;
}
//Testumgebung ende
for(size_t i=ax0;i<=ax1;i++)
{
for(size_t n=ay0;n<=ay1;n++)
{
summe=summe+d[i][n];
}
}
return summe;
}
//Rückgabe von ax
size_t get_ax()
{
return this->ax; //Rückgabe der Member variable
}
//Rückgabe von ay
size_t get_ay()
{
return this->ay; //Rückgabe der Member variable
}
//Wert an Position x,y setzen
void set(size_t ax=0, size_t ay=0, double wert=0.0)
{
if(d!=NULL && ax<this->ax && ay<this->ay) //Prüfuen ob d existent / vergleich ob ax < als Member ax (ay)
{
d[ax][ay]=wert;
}
else
{
cout<<"Wert konnte nicht gesetzte werden, objekt nicht existent oder Position oberhalb des Arrays\n";
}
}
//Wert holen // Anzeigen
double get(size_t ax=0, size_t ay=0)
{
if(ax>this->ax || ay>this->ay)
{
cout<<"Unzulässige Werte x y \n";
return 0;
}else
{
return d[ax][ay];
}
}
//Anzeigen Aller Elemente
void show(size_t ax0=0, size_t ax1=0, size_t ay0=0, size_t ay1=0)
{
//Testumgebung für alle Funktionen -> könnten auch als Funktion definiert werden ...
//test ob ax/y0 > ax/y1
int temp;
if(ax0>ax1)
{
temp=ax0;
ax0=ax1;
ax1=temp;
}
if(ay0>ay1)
{
temp=ay0;
ay0=ay1;
ay1=temp;
}
//test ende
//Testen ob ay1|ax1 > this->ax/ay
if(ax1>=this->ax)
{
ax1=(this->ax)-1; //Klammern dienen nur der optik
}
if(ay1>=this->ay)
{
ay1=(this->ay)-1;
}
//Testumgebung ende
//Ausgabe Schleife
for(size_t i=ax0;i<=ax1;i++)
{
for(size_t n=ay0;n<=ay1;n++)
{
cout<<d[i][n]<<"\t";
}
cout<<"\n";
}
}//Ende Show
void ein(size_t ax0=0, size_t ax1=0, size_t ay0=0, size_t ay1=0)
{
int wert=0;
//Testumgebung für alle Funktionen -> könnten auch als Funktion definiert werden ...
//test ob ax/y0 > ax/y1
int temp;
if(ax0>ax1)
{
temp=ax0;
ax0=ax1;
ax1=temp;
}
if(ay0>ay1)
{
temp=ay0;
ay0=ay1;
ay1=temp;
}
//test ende
//Testen ob ay1|ax1 > this->ax/ay
if(ax1>=this->ax)
{
ax1=(this->ax)-1; //Klammern dienen nur der optik
}
if(ay1>=this->ay)
{
ay1=(this->ay)-1;
}
//Testumgebung ende
for(size_t i = ax0;i <=ax1;i++) //-1 da die werte von ax0 mit 1 kommen [Index0 beachten]
{
for(size_t n = ay0;n<=ay1;n++) //-1 da die werte von ax0 mit 1 kommen [Index0 beachten]
{
cout<<"Eingabe ["<<i<<"],["<<n<<"] = ";
do {
cin>>wert;
if(cin.eof()) break;
if(cin.fail() || (cin.peek() != '\n')){
cout<<"Falsch, erneut eingeben: ";
cin.clear(); cin.ignore(INT_MAX,'\n');
continue;
}
break;
} while(true);
d[i][n]=wert;
cout<<"\n";
}
cout<<"\n";
}
}
};
int main()
{
int ax,ay;
cout<<"Zeilen Anzahl: ";
cin>>ax;
cout<<"Spalten Anzahl: ";
cin>>ay;
zweidim d(ax,ay);
d.set(ax-1,ay-1,100);
cout<<"Element ["<<ax<<"]["<<ay<<"] = "<<d.get(ax-1,ay-1)<<"\n";
d.show(0,ax,0,100);
d.ein(0,ax,0,ay);
d.show(0,ax,0,ay);
cout<<"gesamtsumme = "<<d.summe(1,ax,1,ay)<<"\n";
system("PAUSE");
return 0;
}