"Klaus Petersen" <ng@spectual.ra.bnaa.dk> wrote in message
news:41a4f8b5$0$84102$14726298@news.sunsite.dk...
[8<8<8<]
> #include <stdio.h>
Ikke anbefalet (depricated) i C++.
Brug
#include <cstdio>
eller endnu bedre
#include <iostream>
i stedet.
[8<8<8<]
> Hvad gør jeg galt?
Med mindre at du ønsker at opnå noget meget specielt, og ikke blot en
"almindelig" copy-assignment, så er dit problem at du bruger pointere i
stedet for referencer.
Desuden blander du lidt rundt på hvor der skal stå "const".
Signaturen på copy-assignment er
class T
{
// ...
T& operator=(const T& rhs)
{
// whatever
return *this;
}
// ...
};
"const" lover at "rhs" (right hand side) ikke bliver ændret ved at tildele
den _værdi_ til et andet objekt.
Ved at returnere en T& kan man sætte flere tildelinger sammen:
T t1(1), t2(2), t3(3);
t1 = t2 = t3;
Ved at returnere ikke const reference, holder du samme krav som assignment
operatoren selv stiller.
Se eventuelt
The C++ Programming Language, Special Edition
Bjarne Stroustrup
ISBN 0-201-70073-5
side 246 og 945 for yderligere information.
Dit eksempel bliver så:
#include <iostream>
class test
{
public:
test(int i_arg) :
i(i_arg) {}
test& operator=( const test& rhs )
{
std::cout << "assignment: " << i << "=" << rhs.i << std::endl;
i = rhs.i;
return *this;
}
private:
int i;
};
int main()
{
test t1(1), t2(2), t3(3);
t1 = t2 = t3;
}
Så slipper du samtidig af med brug af new i eksemplet, og det hele bliver
præcis som at bruge en integer
Af nysgerrighed: har du lært Java eller C# først (siden du i et så lille
eksempel bruger pointe og new) ?
Venlig hilsen
Mogens Hansen