首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++运算符重载。为什么我不能正确地制作原型?

C++运算符重载。为什么我不能正确地制作原型?
EN

Stack Overflow用户
提问于 2021-01-05 21:38:19
回答 1查看 52关注 0票数 0

这可能看起来真的是一个愚蠢的问题,但我在过去的一个小时里一直在研究和举例子,还没有找到解释,所以我不妨在这里继续寻找。

为什么它可以正常工作并正确编译:

代码语言:javascript
复制
#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;
    }
    
}

但这不是:

代码语言:javascript
复制
#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;
        
    }

我在代码的第二次迭代中遇到的问题是:如果我将操作符重载移到类之外,那么尽管是原型,它也无法工作。

EN

回答 1

Stack Overflow用户

发布于 2021-01-07 22:51:37

运算符定义中缺少返回类型:

代码语言:javascript
复制
Fraccao::operator *(const Fraccao& Frac){ 

应该是

代码语言:javascript
复制
Fraccao Fraccao::operator *(const Fraccao& Frac){
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65580003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档