Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » sizeof bei Objekten

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
10.01.2004, 18:27 Uhr
cmos



Hallo,
habe hierzu eine Frage, was sonst


C++:
feld::feld(const feld& copied_Feld)
{
    m_size=copied_Feld.m_size;
    m_data=new double[m_size];
    for(int i=0;i<m_size;i++)
    {
        m_data[i]=copied_Feld.m_data[i];
    }
}



Der Kopierkonstruktor funktioniert. Was ist wenn ich nun aber die größe
eines weiteren Objektes anzeigen lasse?
Ich habe den Kopierkonstrukor als Vorlage genommen und das hier probiert.


C++:
double feld::sizeoffeld(const feld& size_cp_feld)
{
    return(sizeof(size_cp_feld.m_data));
}


Hintergrundgedanke war hier ähnlich wie beim Kopierkonstruktor das
ich die Größe des übergebenen Objekts sehen kann.
Es wird eine 4 ausgegeben obwohl ich 20 Felder erstellt habe.
Denke ich hier komplett in die falsche Richtung?

Wenn ich unter main() nun feld f1(10) und feld f2(15) erzeuge und dann
eine Funktion für sizeof hätte, woher sollte die dann wissen auf welches
Objekt ich mich beziehe ?
Versteht ihr was meine Anliegen ist ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.01.2004, 18:46 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


ich glaub sizeof wird schon bestimmt bevor das proggie läuft, also schon beim compilieren...
wenn du da was dynamsich vergrösserst hilft dir das glaube ich nicht wirklich, weils ja schon zur laufzeit fix ist...

ich vermute mal um wirklich zu wissen wie gross dein objekt ist müsstest du dir eine ziemlich schmutzige programmierung überlegen....
also quasi so mit zeiger holen nach void casten und dann das letzte element im array und dann wieder nach void casten und die differenz der addressen ist dann deine grösse...problem ist dann auch noch wenn die sachen nicht hintereinander im speicher liegen...

kann aber sein das ich auch völlig falsch liege aber ich würde sowas vermuten...
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 10.01.2004 um 18:46 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.01.2004, 18:48 Uhr
(un)wissender
Niveauwart


Ich denke, m_data ist ein pointer, sizeof(pointer) ist bei 32bit normalerweise 4.
Warum nicht:

C++:
int feld::sizeoffeld(const feld& size_cp_feld) {
    return(sizeof(*size_cp_feld.m_data) * size_cp_feld.m_size);
}



Damit hast du dann die Anzahl Bytes, die das gesamte Feld belegt (wenn m_size die Länge deines Feldes darstellt).
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 10.01.2004 um 18:56 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.01.2004, 18:49 Uhr
(un)wissender
Niveauwart


@Windalf
Schon wieder!
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.01.2004, 18:49 Uhr
cmos



HI,
danker erstmal für die schnelle Antwort.
Habe jetzt mal

C++:
double sizeoffeld()
{
      return (sizeof(m_data));
}


probiert
und das im main über die objekte aufgerufen.
Also... f2.sizeoffeld();
Komm aber das gleiche raus wie bei dem da oben.
Von void casten usw. hab ich keine Ahnung.
Also laß ich das jetzt ersteinmal.

mfG & schönes WE
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.01.2004, 18:55 Uhr
(un)wissender
Niveauwart


Ich glaube, sizeof kann man nicht überladen, da es zur Compilezeit ermittelt wird.
Deshalb solltest du es mit einer eigene Methode machen, evtl. wie in meinem Beipsiel.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.01.2004, 19:17 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Ich glaube, sizeof kann man nicht überladen


Ich bin mir sogar ziemlich sicher das das nicht geht... Ich hatte da glaub ich mal was gelesen...

@(un)wissender

Zitat:

Schon wieder!


Du musst dir ne Freundin besorgen dann bekommst du auch ganz flinke Finger...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.01.2004, 19:19 Uhr
(un)wissender
Niveauwart


Frauen mögen mich nicht.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
10.01.2004, 19:21 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Du darst sie nur nicht von vornherein mit den fakten konfrontieren was du eigentlich willst...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
10.01.2004, 19:29 Uhr
(un)wissender
Niveauwart


Ach so, das ist es also, und ich frage mich schon seid 10 Jahren, was ich falsch mache.
@virtual hat dafür sicherlich auch einen Standard, darum ist er auch erfolgreicher als ich (Ich glaube, er hat eine kleine Tochter).
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: