Witam was.
Dziś chciałem troszkę po przypominać sobie C++. Programowałem wcześniej w C#. Przesyłam wam mój kod:
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <sstream>
using namespace std;
class Ulamek
{
private:
int licznik,mianownik;
string Ul;
public:
Ulamek()
{
}
Ulamek(string k)
{
Set_U(k);
}
void Set_U(string ULt)
{
Ul=ULt;
}
void Parse()
{
string tmp_l,tmp_m;
int i=0;
while(i<Ul.size())
{
if(Ul[i]=='/')break;
else tmp_l+=Ul[i];
i++;
}
i+=1;
while(i<Ul.size())
{
tmp_m+=Ul[i];
i++;
}
istringstream il(tmp_l);
il>>licznik;
istringstream im(tmp_m);
im>>mianownik;
}
void Skracanie()
{
int k=__gcd(licznik,mianownik);
licznik/=k;
mianownik/=k;
}
static Ulamek dodawanie(const Ulamek &a,const Ulamek &b)
{
Ulamek tmp("1/3");
return tmp;
}
void Wypisz()
{
cout<<licznik<<"/"<<mianownik;
}
};
int main()
{
string ta,tb;
cin>>ta>>tb;
Ulamek a(ta);
Ulamek b(tb);
a.Parse();
b.Parse();
a.Wypisz();
cout<<" + ";
b.Wypisz();
cout<<" = ";
Ulamek c=Ulamek::dodawanie(a,b);
return 0;
}
W czym jest problem a mianowicie w metodzie static dodawanie. Kiedy nie miałem konstruktora w klasie a próbowałem zwracać tmp wszystko było ok. Jeśli dodałem konstruktor mój Code::Blocks wywalał mi błąd:
"Could not convert 'tmp' from 'Ulamek(*)()' "
Druga kwestia jest fakt przecież w takim C# jak jest metoda statyczna to odwołujemy się Nazwaklasy.nazwametody();
Jestem mega zdziwiony że w C++ odwołujemy się :: i czy to jest poprawne i z czego to wynika ?