Kod: Markera allt
micke@hal:~/c++/skoluppgifter/Kurs2/ou5/dummy$ g++ dummy.cpp
micke@hal:~/c++/skoluppgifter/Kurs2/ou5/dummy$ ./a.out
Denna dummy har värdet: 0
Denna dummy har värdet: 2
Värde i getDummy(): 2
Denna dummywrapper har en dummy med värdet: 134515040
Så här ser koden ut:
Kod: Markera allt
/*
* dummy.cpp
*
* Copyright 2009 Micke Nordin <micke@hal>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
* MA 02110-1301, USA.
*/
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string>
using namespace std;
//Dummy-deklaration
class dummy
{
private:
int i; //Ett tal
public:
dummy(); //Defaultkonstruktor
dummy(int i); //Överlagrad konstruktor
int getI() const; //Hämta talet
void setI(int ii); //Ställ om talet
friend ostream & operator<<(ostream &os, const dummy &d); //Överlagrad utskriftsoperator
friend dummy & operator>>(istream &is, dummy &d); //Överlagrad inläsningsoperator
};
//Dummywrapper-deklaration
class dummywrapper
{
private:
dummy *md; //En pekare till en dummy
public:
dummywrapper(); //Defaultkonstruktor
dummywrapper(dummy *dd); //Överlagrad konstruktor
dummywrapper(const dummywrapper &dw); //Kopieringskonstruktor
dummy* getDummy() const; //Hämta pekaren
friend ostream & operator<<(ostream &os, const dummywrapper &dw); //Överlagrad utskriftsoperator
};
//Dummy implementering
dummy::dummy()
{
i = 0;
}
dummy::dummy(int ii)
{
i = ii;
}
int dummy::getI() const
{
return i;
}
void dummy::setI(int ii)
{
i = ii;
}
ostream & operator<<(ostream &os, const dummy &d)
{
os << d.getI();
return os;
}
dummy & operator>>(istream &is, dummy &d)
{
string s;
getline(is,s);
d.i = atoi(s.c_str());
return d;
}
//Dummywrapper implementering
dummywrapper::dummywrapper()
{
md = 0; //Default är nullpekare
}
dummywrapper::dummywrapper(dummy *dd)
{
md = dd; //peka på dd
}
dummywrapper::dummywrapper(const dummywrapper &dw)
{
md = dw.getDummy(); //Gör djupkopiering med getDummy()
}
dummy* dummywrapper::getDummy() const
{
dummy d(md->getI()); //En ny dummy med värdet från den gamla
dummy *dptr; //En ny pekare till en dummy
dptr = &d; //Peka pekaren mot dummyn
cout << "Värde i getDummy(): " << *dptr << endl; //Kontrollutskrift som blir rätt
return dptr; //Skicka tillbaka den nya pekaren
}
ostream & operator<<(ostream &os, const dummywrapper &dw)
{
dummy *d = dw.getDummy(); //Skapa en ny pekare till en dummy
os << "Denna dummywrapper har en dummy med värdet: " << *d << endl; //Skriv ut dummyn
return os;
}
//Main
int main()
{
dummy md; //Skapa en dummy
cout << "Denna dummy har värdet: " << md << endl; //Här blir det rätt
ifstream f("test.txt"); //Fil att hämta värdet från
f >> md; //Hämtar värdet
cout << "Denna dummy har värdet: " << md << endl; //Här blir det också rätt med det uppdaterade värdet
dummywrapper mdw(&md); //Skapa en dummywrapper
cout << mdw; //Här skriver den ut fel värde
return 0;
}
/Micke