繁体   English   中英

C ++中的operator =重载

[英]operator= overload in C++

我需要有关操作员分配的帮助。 这是代码:

正弦曲线

class Sinusoid : public Component
{   
    float fs, f, A, fi;
    int N;
    double *array;

public:
    Sinusoid(float fs, float f, float Ts, float fi, float A);
    void count(int type=1);
    void clear();
    ~Sinusoid();
    double *getArray() { return this->array; }
    double*& operator=(Sinusoid* const &rhs) {
        return rhs->array;
    };
};

main.cpp:

#include "headers.h"
int main()
{
    int N = 1000 * 2.5;
    Sinusoid *sinus = new Sinusoid(1000, 15, 2.5, (M_PI / 4), 0.7);
    double **answers = new double*[7];
    for (int i = 0; i < 7; i++) {
        answers[i] = new double[N];
    }
    //lab1
    //Zad1
    sinus->count(1);
    answers[0] = sinus;
    return 0;
    }

构建此代码时,出现以下问题:

C2440'=':无法从'Sinusoid *'转换为'double *'main.cpp:15

我知道我可以使用重载运算符“ =”来分配两个类,但是我想使用一个私有类(双* array;)。 我知道我可以通过“ getArray()”方法做到这一点,但是我想学习更多“美丽”的实践。 希望你能帮助我。

谢谢。

您的double*& operator=(Sinusoid* const &rhs)运算符没有执行您显然认为会执行的操作。

一个operator=构件功能可以具有类(的实例Sinusoid )在赋值的左侧和参数类型(实例Sinusoid*上的右侧)。 因此,您撰写的内容将允许您执行以下操作:

Sinusoid* pointer = whatever;
Sinusoid object;
object = pointer;

显然,这不是您想要的。 (也许不是您想要的东西。)

operator=的返回类型对此基本用法没有任何影响。 这意味着object = pointer的结果为double*& 因此,它可以让您编写:

double* foo;
foo = (object = pointer);

但这对于您想要的仍然没有帮助。

由于answers[0]是一个指针,因此无法为其创建自定义赋值运算符。 但是,该语言具有可在此处使用的不同机制。 您可以为类创建一个隐式转换运算符,以便允许编译器在合理的情况下将其转换/分解为其他类型。 尝试将以下内容添加到您的课程中:

operator double* () {
    return rhs->array;
}

这应该适合您想要的情况。

尽管就我个人而言,我认为离开用法要求首先调用getArray()并没有什么错。 有时,显式函数调用的清晰度可以使读取实际情况变得更加容易。

尝试...

class Sinusoid : public Component {
...
   operator double*()  {
       return array;
   }

和用法

answers[0] = *sinus;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM