Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Mehrdimensionales Array übergeben

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
06.01.2004, 12:30 Uhr
~NicoX
Gast


Hi,

ich habe ein Programm bestehend aus mehreren Klassen.
In Klasse 1 hab ich nun ein Array:

C++:
double array[100][2];


dieses Array übergeb ich nun per

C++:
Klasse2.SetArray(array);


an die 2. Klasse. Aber wie kann ich nun in der 2. Klasse auf die Elemente des Arrays zugreifen??? Ich könnte natürlich in der SetArray Methode das Array per Schleife durchlaufen und in ein neues kopieren:

C++:
void SetArray(double array[][2])
{
   for(int i=0;i<=1;i++)
     for(int j=0; j<=99;j++)
       m_newArray[j][i]=array[j][i];
}



Aber das ist ja schon ziemlich umständlich! Am besten wäre es doch, einen Pointer auf array zu haben, aber ich hab es nicht hinbekommen dann auf die einzelenen Elemente zuzugreifen! Oder geht es auch anders??
Bin für jeden Tip dankbar!!
Grüße!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.01.2004, 12:31 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


übergib deiner methode ein double**;

C++:
void SetArray(double **array,int x,int y) {....



macht meiner Meinung überigens wenig sinn wenn Klasse 2 in Klasse 1 rumpfuschen darf...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 06.01.2004 um 12:34 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.01.2004, 14:47 Uhr
~NicoX
Gast


Danke für die Antwort, aber was ist ein double **?! Und warum noch ein x und y übergeben? Ich möchte doch das komplette Array übergeben! Und wo pfuscht Klasse 2 in Klasse 1 rum?? Das Array wird in Klasse 1 deklariert und initialisiert und dann wird die SetArray Methode aus Klasse 2 in Klasse 1 aufgerufen und so das Array übergeben! Klasse 2 greift nie auf Klasse 1 zu!
Gruß NicoX
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.01.2004, 14:52 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


double** ist ein doppelter pointer... x und y sollen die dimensionen des arrays sein...
vorteil hierbei ist das man dann nicht nur arrays einer festen grösse verarbeiten kann....

falls du mit der einen dimension x und y meinst ist es vielleicht eine überlegung sowas wie

C++:
typedef struct{double x;double y;}mypoint;


zu verwenden...

da du ja wahrscheinlich nicht weisst ob du genau 100 einträge oder mehr brauchst, empfiehlt es sich statt eines arrays eine containerklasse aus der stl-zu verwenden die dir das lästige speichermanagement abnimmt...

oder du allokierst den speicher von hand...

mit deinen beiden klassen weiss ich nicht ganz was du bezweckst...
Vielleicht solltest du mal erklären was du machen willst....
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 06.01.2004 um 14:53 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.01.2004, 15:24 Uhr
~NicoX
Gast


Ach so, aber wie sollte dann der Rumpf der SetArray Methode aussehen?
Zur Erklärung der beiden Klassen:
Klasse 1 ließt Werten aus einer Datei in Arrays ein.
Das Array wird (momentan eben noch per for-Schleife) an Klasse 2 übergeben.
Dort werden Berechnungen mit den Werten gemacht, die Ergebnisse wieder in Arrays geschrieben, dann diese Werte an eine dritte Klasse übergeben und dort grafisch angezeigt. Das funktioniert alles wunderbar, nur übergeb ich die Arrays momentan eben noch wie oben gezeigt per for-Schleife, deshalb ist die Laufzeit halt nicht so toll, da es ca. 30 Arrays mit biszu 3000 Werten sind.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.01.2004, 15:42 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


na wenn du das mit der laufzeit verbessern willst...
ich weiss nicht genau was ein aufruf einer funktion der du ein array fester grösse übergibst macht?
ob der wirklich das ganze array kopiert oder doch nur mit nem pointer arbeitet... (das kann uns bestimmt der virtual sagen)...
wenn du jedenfalls nur ein pointer üebrgibst bist du was die performance angeht auf der sicheren seite...

wofür du da allerdings 3 verschiedene klassen brauchst ist mir schleierhaft...
kann man auch mit einer machen
einfach eine klasse nehmen die 3 mehtoden hat
daten einlesen
daten verarbeiten
daten ausgeben


dein mit bis zu 3000 werten sagt mir das du auf keinen fall ein fixes array nehmen solltest sondern du musst den speicher dynamisch allokieren oder nimm halt eine containerklasse aus der stl... z.b std::vector....

schau mal in der forumssuche zu std::vector nach da sind massenweise beispiel dazu. der nimmt dir das speichermanagment ab und du musst dich um nichts mehr kümmern kannst aber genauso wie mit einem array damit arbeiten...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 06.01.2004 um 15:42 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.01.2004, 16:37 Uhr
~NicoX
Gast


Okay, danke, dann werd ich mich mal schlau machen über std::vector.
Allerdings arbeite ich ja mit der MFC, passt da STL mit rein...?!
Das ganze Programm besteht aus weit mehr als 3 Klassen (über 20), es ist ein ziemlich großes Projekt, da kann ich doch nicht alles in eine Klasse packen, das wär ja eine riesen Klasse. z. B. ist eine Klasse ja auch eine MFC Dialogklasse, die andere eine Klasse in welcher nur Berechnungen durchgeführt werden usw. Das pack ich doch nicht alles in eines, das würde die komplette objekorientierte Programmierung übern Haufen werfen!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.01.2004, 16:45 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Allerdings arbeite ich ja mit der MFC, passt da STL mit rein...?!


ja geht im allgemeinen
der vc++ frisst auch stl-templates manchmal schmeist er warnings aber es funzt... Mit vector solltest du jedenfalls keine probleme haben...


Zitat:

Das ganze Programm besteht aus weit mehr als 3 Klassen


Um so schlimmer wenn du immer mehr klassen verwendest die fast gar nichts können das wird ja super unübersichtlich....
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 06.01.2004 um 17:24 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.01.2004, 17:01 Uhr
~NicoX
Gast


Okay, thx, das werd ich probieren!

Also dann geht unser Verständniss von OOP auseinander, im Studium bekommen wir beigebracht sauber modale und nichtmodale Klassen zu trennen, sowie für unterschiedliche Dinge wie Berechnungen, grfische Darstellungen usw. neue Klassen zu verwenden. Ist doch eigentlich auch logisch, in 20 Klassen wo jede einen eindeutigen Namen wie z.B. CBerechnungen, CZeichnen, ... finde ich doch weitaus schneller etwas als in einer einzigen riesen Klasse mit 4000 Zeilen Code! Früher als man noch strukturiert Programmiert hat war das meines Wissens so üblich, aber doch nicht in der OOP!
Gruß NicoX
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.01.2004, 17:31 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Naja wieviel Klassen du hast hängt ja im wesentlichen von der Projektgrösse ab...
Ist natürlich alles designfrage
aber wenn in jeder klasse nur eine Methode ist (vom konstruktor mal abgesehen) hat man meiner Meinung nach was falsch gemacht....
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: