簡體   English   中英

運算符重載-(前綴)

[英]Overload of operator— (prefix)

我嘗試了重載運算符-前綴,但是出現錯誤,有人需要幫助嗎?

#include <iostream>
#include "Circulo.h"

using namespace std;

int main()
{
    //parametrizado
    Circulo c1(10.5, 20.0, 1, "Rojo Intenso"),c2, c3;
/*
    c2 = c1--;    // decrementa, si se puede, el diámetro

    c3 = c2++;    // incrementa, si se puede, el diámetro

    Circulo c4 = c3++;

    c4.CambiarColor("Amarillo patito flúo");


    cout << c1 << c2 << c3 << (c4 = c3) << endl;
*/
    return 0;
}

Circulo.cpp

#include "Circulo.h"
#include <string.h>

using namespace std;

Circulo :: Circulo() //por defecto
{
    x=5.0;
    y=6.0;
    diam=50;
    strcpy(Color,"Rojo");
}

Circulo::Circulo(float x,float y,unsigned diam,char *Color) //parametrizado
{
    this->x=x;
    this->y=y;
    this->diam=diam;
    this->Color= Color;
}

Circulo::Circulo(const Circulo& obj) //por copia
{
    this->x=obj.x;
    this->y=obj.y;
    this->diam=diam;
    this->Color=Color;
}

Circulo :: operator--(const Circulo &obj)const
{
    Circulo aux(this->real+obj.x);
    return aux;
}

循環

#ifndef CIRCULO_H
#define CIRCULO_H
#include <iostream>

using namespace std;

class Circulo
{
    public:
        Circulo();
        Circulo(float x,float y,unsigned diam,char *Color);
        Circulo(const Circulo& obj);
        Circulo operator --(const Circulo &obj) const;
    private:
        float x,y;
        unsigned diam;
        char *Color;

};

#endif // CIRCULO_H

錯誤:后綴'Circulo Circulo :: operator-(const Circulo&)const'必須采用'int'作為其參數

C:\Documents and Settings\laboratorios\Mis documentos\Clase Circulo\Circulo.h|13|error: postfix 'Circulo Circulo::operator--(const Circulo&) const' must take 'int' as its argument|
C:\Documents and Settings\laboratorios\Mis documentos\Clase Circulo\Circulo.cpp|30|error: ISO C++ forbids declaration of 'operator--' with no type [-fpermissive]|
C:\Documents and Settings\laboratorios\Mis documentos\Clase Circulo\Circulo.cpp|30|error: postfix 'int Circulo::operator--(const Circulo&) const' must take 'int' as its argument|
||=== Build finished: 3 errors, 0 warnings (0 minutes, 0 seconds) ===|

當重載屬於成員函數(而不是friend )的運算符時,無需指定其參數。

Circulo operator --(const Circulo &obj) const;

應該

Circulo operator --(); // probably not const, since you modify the instance

該錯誤告訴您,編譯器期望一個(dummy) int ,這是編譯器用來意識到您想要定義后綴operator--()的約定。

Circulo operator --(int); // dummy int, convention postfix

有關運算符重載的最佳指南之一,請參見運算符重載 (一元算術運算符)。

您可以在當前實例上調用這些運算符,例如

Circulo c;
--c; // same as c.operator--();

因此,無需指定參數。

同樣,您的實現是不正確的(感謝@Praetorian),您不需要復制對象,而是直接修改實例,然后返回對*this的引用(對於前綴operator--() )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM