Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » werteübergabe mit NEW

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 <
000
05.05.2005, 19:14 Uhr
~kitkat
Gast


Hallo,

ich hoffe ihr könt mir helfen, dies ist teil meiner hausaufgabe. habe ein programm geschrieben, das diverse matrizenrechnereien ausführt... (3x3 matrix, werte eingebbar)

so übergebe ich die werte an meine 3x3 matrix (siehe code ganz unten!)

jetzt soll ich aber die 9 werte gleich bei NEW mitgeben und einen 'richtigen' default konstruktor basteln, der das ganze zeugs auch richtig übernimmt.
ich würde gerne weiter mit dem push_back arbeiten, allerdings geht das ja nicht bevor ich das objekt erstellt habe ???

HILFE versteht mich einer


C++:

#include <iostream>
#include <vector>
#include <iomanip>
using namespace std;

class matrix{
public:
matrix(){;}
void eingabe(void){
    vector<double> mat; double wert;
    cout << "eingabe von 9 zahlen!" << endl;
    while ((mat.size()!=9)&& cin >> wert)
            mat.push_back(wert);
        }};

int main(void){
    matrix *meine_matrix = new matrix;
    meine_matrix->eingabe();
    cout << endl << "<Taste druecken>";
    fflush(stdin);
    getchar();
    delete meine_matrix;
    return 0;}



 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.05.2005, 07:49 Uhr
doppler



Zunächst mal funktioniert das Einlesen so nicht. Wenn du meine_matrix->eingabe() aufrufst, wird zwar der vector<double> mat erzeugt, und es werden die 9 Zahlen eingelesen, aber sobald die Funktion eingabe() abgehandelt ist, wird dieser vector wieder destruiert und die 9 Zahlen sind vergessen.

Um auf den vector<double> zugreifen zu können, muss matrix einen solchen als Daten-member haben. Versuch mal so (ungetestet):

C++:
class matrix{
public:
   std::vector<double> mat;
   matrix() : mat() {
      eingabe();
   };
   void eingabe(void){
      double wert;
      cout << "eingabe von 9 zahlen!" << endl;
      while ((mat.size()!=9)&& cin >> wert)
            mat.push_back(wert);
       }
};



Wenn du jetzt den default-Konstruktor aufrufst, wird zuerst mat mit seinem default-Konstruktor erzeugt (wegen :mat()) und dann die Funktion eingabe aufgerufen. Auf mat kannst du dann mit meine_matrix->mat zugreifen.

Achtung: beim zweiten Aufruf von eingabe() wird nurnoch "eingabe von 9 zahlen!" hingeschrieben, aber nichts mehr eingelesen, weil mat schon die Länge 9 hat.

Dieser Post wurde am 06.05.2005 um 07:56 Uhr von doppler editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.05.2005, 10:11 Uhr
~kitkat
Gast


DANKE!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.05.2005, 11:45 Uhr
0xdeadbeef
Gott
(Operator)


Ich denke, so sollte es gehen (ungetestet), und ist irgendwie schöner. Das Prinzip sollte klar werden.

C++:
#include <iomanip>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

class matrix {
public:
  matrix() {}

private:
  vector<double> feld_;

  friend istream &operator>>(istream &, matrix&);
};

istream &operator>>(istream &in, matrix &mat) {
  mat.feld_.clear();
  mat.feld_.reserve(9);
  for(int i = 0; i < 9; ++i) {
    int x;
    cin >> x;
    mat.feld_.push_back(x);
  }
}

int main(){
    matrix meine_matrix;
    string s;

    cout << "9 Zahlen eingeben: " << flush;
    cin >> meine_matrix;
    cout << endl << "<Taste druecken>" << flush;

    getline(cin, s); // Rest aus dem Eingabepuffer lesen
    getline(cin, s); // Zeile einlesen. Diese zwei Zeilen später durch gebufferte Eingabe von cin ersetzen.

    return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 06.05.2005 um 11:46 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


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: