im folgende code wird der funktion &operator++ (); aufgerufen in den zeilen mit den "hier" markierung , die frage ist warum? ist diese funktion ein kopierkostruktor ?, oder nur ein normale klass funktion und was hat i++ mit dieser funktion zu tun ? , selbe frage gilt auch mit counter a= ++i;
C++:
// Listing 14.2
// Den Inkrement-Operator überladen
#include <iostream>
class Counter
{
public:
Counter();
~Counter(){}
int GetItsVal()const { return itsVal; }
void SetItsVal(int x) {itsVal = x; }
void Increment() { ++itsVal; }
const Counter& operator++ ();
private:
int itsVal;
};
Counter::Counter():
itsVal(0)
{}
const Counter& Counter::operator++()
{
++itsVal;
return *this;
}
int main()
{
Counter i;
std::cout << "Wert von i: " << i.GetItsVal()
<< std::endl;
i.Increment();
std::cout << "Wert von i: " << i.GetItsVal()
<< std::endl;
++i;
std::cout << "Wert von i: " << i.GetItsVal()
<< std::endl;
Counter a = ++i;
std::cout << "Wert von a: " << a.GetItsVal();
std::cout << " und von i: " << i.GetItsVal() << std::endl;
1. Es gibt kein "hier" im Code 2. Es gibt kein i++ im Code (würde so auch nicht kompilieren)
Was denkst du den was operator++ tut? ++i kann man auch so schreiben i.operator++() i++ kann man so schreiben: o.operator++(int) Der int dient nur zur Unterscheidung von pre- und postfix.
std::cout<<1; ist eigentlich std::cout.operator<<(1);
Gogogle mal ein bisschen, nach C++ und operator überladen und du findest alles was du willst. -- Wer früher stirbt ist länger tot.
ja ich habe die markierung vergessen zu schreiben ich habe gemeint die zeile in der
++i ; geschrieben ist , an dieser stelle wird der funktion
const Counter& Counter::operator++()
{
++itsVal;
return *this;
}
gerufen
und ich finde keine gemeinsamkeit zwischen ++i; und der funktion const Counter& operator++ (); das war meine frage , warum wird diese funktion hier aufgerufen?
Hö? Was für eine Gemeinsamkeit? Meinst du, dass ++i ganz anders als operator++() aussieht? Das hat (un)wissender eigentlich schon erklärt: ++i ist das gleiche wie i.operator++() Ich denke, du kannst dir vorstellen, warum man die erste Möglichkeit eingeführt hat... -- Gruß predator
Zitat von Edsger W. Dijkstra:
Es ist praktisch unmöglich, einem Studenten gutes Programmieren beizubringen, wenn er vorher in BASIC programmiert hat. Als potenzielle Programmierer sind sie geistig verstümmelt ohne Hoffnung auf Erholung.