This may seem like a really dumb question, but I've been researching and taking examples for the last hour and have yet to find the explanation, so I might as well ask here while I keep searching.
Why does this work and compile properly:
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <math.h>
using namespace std;
class Fraccao{
int denominador;
public:
int numerador;
Fraccao(int N = 0, int D = 1);
void ChangeND(int N, int D);
Fraccao operator*(Fraccao const &Frac){
Fraccao FTemp;
FTemp.numerador = this->numerador * Frac.numerador;
FTemp.denominador = this->denominador * Frac.denominador;
return FTemp;
}
};
int main(){
Fraccao F1(1, 2);
Fraccao F2(3);
Fraccao F3(3, 4);
F1 = F2*F3;
cout << F1.numerador;
}
Fraccao::Fraccao(int N, int D){
numerador = N;
if(D > 0){
denominador = D;
}else{
denominador = 1;
}
cout << "Fraccao " << numerador << "/" << denominador << " criada." << endl;
}
void Fraccao::ChangeND(int N, int D){
numerador = N;
if(D > 0){
denominador = D;
}else{
denominador = 1;
}
}
But this doesn't:
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <math.h>
using namespace std;
class Fraccao{
int denominador;
public:
int numerador;
Fraccao(int N = 0, int D = 1);
void ChangeND(int N, int D);
Fraccao operator*(Fraccao const &Frac);
};
int main(){
Fraccao F1(1, 2);
Fraccao F2(3);
Fraccao F3(3, 4);
F1 = F2*F3;
cout << F1.numerador;
}
Fraccao::Fraccao(int N, int D){
numerador = N;
if(D > 0){
denominador = D;
}else{
denominador = 1;
}
cout << "Fraccao " << numerador << "/" << denominador << " criada." << endl;
}
void Fraccao::ChangeND(int N, int D){
numerador = N;
if(D > 0){
denominador = D;
}else{
denominador = 1;
}
}
Fraccao::operator *(const Fraccao& Frac){
Fraccao FTemp;
FTemp.numerador = this->numerador * Frac.numerador;
FTemp.denominador = this->denominador * Frac.denominador;
return FTemp;
}
The problem I appear to be getting on the second iteration of code is that: If I move the operator overload to outside the class it fails to work despite the prototype.