gpt4 book ai didi

c++ - operator= 在 C++ 中重载

转载 作者:行者123 更新时间:2023-11-28 01:54:31 25 4
gpt4 key购买 nike

我需要一些运算符分配方面的帮助。这是代码:

正弦曲线.h:

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;
};
};

ma​​in.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

我知道我可以用重载运算符“=”分配两个类,但我想采用类的私有(private)成员 (double *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] 是一个指针,因此无法为其创建自定义赋值运算符。然而,该语言有一个不同的机制,可以在这里使用。您可以为您的类创建一个隐式转换运算符,以便允许编译器在合理的情况下将其转换/衰减为不同的类型。尝试将以下内容添加到您的类(class)中:

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

这应该适用于您想要的情况。

尽管我个人并不认为让用法首先要求调用 getArray() 有什么问题。有时,显式函数调用的清晰度可以让您更容易阅读实际发生的事情。

关于c++ - operator= 在 C++ 中重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41651724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com