我需要有关操作员分配的帮助。这是代码:
正弦曲线
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()
并没有什么错。有时,显式函数调用的清晰度可以使读取实际情况变得更加容易。