Ein Problem von Copy-Constructor(pure c und cpp)

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
Hass
Beiträge: 40
Registriert: 12. Juli 2006 10:42

Ein Problem von Copy-Constructor(pure c und cpp)

Beitrag von Hass »

Hallo zusammen,
Ich habe ein leichteren Program geschrieben,aber stellte ich eine extravagantes Problem fest.

Warum die Antworten sind:

---------------------------------------------------------
C:\helloworld>app
normal ctr
return
a=1 b=2 str=hello,world
des~
---------------------------------------------------------
Mein System ist:
winXP Home
minGW Version 3.2.0 for Win
---------------------------------------------------------
Außere Line 1,2,4... .... ....

Ich verstehte nicht, wo das Program den Copy-Constructor benutzt worden ist.Trotzdem war das Ergebnis sicher,daß der Copy-Constructor verwendet worden ist. Ich bestimme...

---------------------------------------------------------
Mein Program ist
---------------------------------------------------------
#include <string>
#include <iostream>
using namespace std;

class A
{
public:
int a;
int b;
string str;
public:
A(){ cout<<"normal ctr"<<endl; }
A( const A& a ) //copy constructor called here
: a( a.a ), b( a.b ), str( a.str )
{ cout<<"cpy ctr"<<endl; }

~A(){ cout<<"des~"<<endl; }//destructor called here
public:
static A from()//a factory method
{
A ca;
ca.a = 1;
ca.b = 2;
ca.str = "hello,world";

cout<<"return"<<endl;
return ca;
}

void print()
{
cout<<"a="<<a<<" b="<<b<<" str="<<str<<endl;
}
};

int main()
{
A a = A::from();
a.print();
}
:lol: :lol: :lol: :lol: :lol: :lol: :lol: :oops: :oops: :oops:
Dateianhänge
helloworld.zip
Source und exe
(126.69 KiB) 248-mal heruntergeladen
Zuletzt geändert von Hass am 7. September 2006 12:32, insgesamt 1-mal geändert.
Einmaliger
Beiträge: 48
Registriert: 22. Juli 2006 11:42

Beitrag von Einmaliger »

'tschuldigung - wie ist die Frage? Da läuft doch alles wie erwartet.
Hass
Beiträge: 40
Registriert: 12. Juli 2006 10:42

Beitrag von Hass »

Einmaliger hat geschrieben:'tschuldigung - wie ist die Frage? Da läuft doch alles wie erwartet.
Sorry, das Problem ist einfach.
Warum wird der String, "cpy ctr", nicht gesehen,wenn das Program läuft ?
Wissen Sie? :x
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag von Goos »

VC++ 6
liefert:

normal ctr
return
cpy ctr
des~
a=1 b=2 str=hello, world

Alles ist bei mir also so, wie ich das auch erwartet haette.

Goos
Hass
Beiträge: 40
Registriert: 12. Juli 2006 10:42

Beitrag von Hass »

Goos hat geschrieben:VC++ 6
liefert:

normal ctr
return
cpy ctr
des~
a=1 b=2 str=hello, world

Alles ist bei mir also so, wie ich das auch erwartet haette.

Goos
Also, ich verstehe....
Aber du kannst mit minGW ... ...
Mein Problem ist nur dabei... ... ...
:roll: :roll:
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag von Goos »

Sorry, ich habe kein minGW.

Goos
Hass
Beiträge: 40
Registriert: 12. Juli 2006 10:42

Beitrag von Hass »

Goos hat geschrieben:Sorry, ich habe kein minGW.

Goos
Schade.......
VCpp und minGW sei wenige...........verschieden.........
Microsoft und Opensource.........................................langweilig
:twisted:
:twisted:
Einmaliger
Beiträge: 48
Registriert: 22. Juli 2006 11:42

Beitrag von Einmaliger »

- An welcher Stelle sollte der Copyconstructor aufgerufen werden?
- VC 6 kann kein korrektes C++ (nur sowas, was es C++ nennt und was grob danach aussieht)
Goos
Beiträge: 360
Registriert: 17. August 2004 10:10
Wohnort: Black Forest

Beitrag von Goos »

Einmaliger hat geschrieben:(nur sowas, was es C++ nennt und was grob danach aussieht)
Genau so ist das und jeder andere Compiler macht das auch so. VC++ machts zwar schlimmer als so manch anderer Compiler, aber man kann sich daran gewoehnen :D

Goos

PS: ach und nu bitte keine ewigen Diskussionen, ich weiss dass der minGW sehr standardkonform ist :)
rmeeh
Beiträge: 32
Registriert: 10. September 2006 18:59
Wohnort: Geislingen
Kontaktdaten:

Beitrag von rmeeh »

Die Problematik wird von Klaus Schmaranz in "Softwareentwicklung in C++ -Springer Verlag-) im Kapilel "Einfache Klassen" recht einleuchtend beschrieben, die Sache mit dem Standardkonstruktor. Der Fehler hier liegt IMHO weniger an den Compilern und was sie daraus machen, sondern an der ansich "schlampigen" Implementierung der Klasse. Wenn sich der Programmierer die kleine Mühe macht, einen vernünftigen Konstruktor zu programmieren, der sich zu allem ja auch noch überladen lässt, ist die "Unwägbarkeit Compiler" nämlich plötzlich gar keine mehr und die Klasse läuft auf allen möglichen Zielplattformen rund.
-Grüße Ralf-
Kein Tag kommt wieder, vergessene Fehler schon....
Antworten