Copy-Constructor und Destructor
-
/* Wer kann folgendes Verhalten erklären
Für die Klasse Bruch habe ich den operator * überladen.
Die Methode returniert ein Objekt per Value. Also wird
der Copy-C'tor aufgerufen.
Warum wird der Copy-C'tor bei Variante 1 nicht aufgerufen,
wenn ein D'tor existiert ?
*/// k.fragen@web.de -----
#include <iostream>
using namespace std;
// Deklaration der Klasse Bruch
class Bruch
{
private:
int zaehler;
int nenner;
[cpp]
public:
Bruch(int=0,int=1);
Bruch(const Bruch &);
~Bruch();
Bruch operator *( Bruch & );
void ausgeben(void);
};Bruch::Bruch(int z, int n)
:zaehler(z),nenner(n)
{}Bruch::Bruch(const Bruch &b)
: zaehler(b.zaehler), nenner(b.nenner)
{
cout << "Copy-C'tor" << endl;
}Bruch::~Bruch(void) {}
Bruch Bruch::operator *( Bruch &b )
{
// Variante 1
// return Bruch( zaehler * b.zaehler, nenner * b.nenner );// Variante 2
Bruch tmp(zaehler * b.zaehler, nenner * b.nenner);
return tmp;
}void Bruch::ausgeben( void )
{
cout << (double)zaehler / nenner << endl;
}int main(void)
{
Bruch b1;
Bruch b2(1,2);
Bruch b3(3,4);b1 = b2 * b3;
b1.ausgeben();
return 0;
}/* Ausgabe bei Variante 1 mit D'tor
0.375
*//* Ausgabe bei Variante 1 ohne D'tor
Copy-C'tor
0.375
*//* Ausgabe bei Variante 2 mit D'tor
Copy-C'tor
0.375
*//* Ausgabe bei Variante 2 ohne D'tor
Copy-C'tor
0.375
*/
-
Bitte cpp-Tags benutzen.
-
b1 = b2 * b3;
Du weist hier zu, hier wird nichts kopiert. Überlad mal den = - Operator.
-
cpp-tags sind echt toll ^^
Bruch Bruch::operator * (const Bruch &b) { return Bruch (zaehler * b.zaehler,nenner * b.nenner); }
Bruch::~Bruch(void) {}
Warum haste den D-tor überhaupt deklariert, wenn er eh leer ist? Oo
Bruch b1; Bruch b2(1,2); Bruch b3(3,4); b1 = b2 * b3; //den operator hast du nicht wirklich überladen, oder? ^^ b1.ausgeben(); //warum nicht den Operator << überladen? return 0;
bb
//edit hmm.. zu langsam : <
-
Ich verlinke einfach mal: http://www.c-plusplus.net/forum/viewtopic-var-t-is-208635-and-highlight-is-.html