указатель на функцию внутри оператора - PullRequest
0 голосов
/ 27 апреля 2020

для домашней работы мне нужно написать программу на cpp с классом, состоящим из массива указателей на функцию и операторы. Мне нужно создать оператор +, так что, когда в основном, это произойдет:

int main()
{
int SIZE = 5;
ptrF* arrPtrF = new ptrF[SIZE];
arrPtrF[0] = add;
arrPtrF[1] = sub;
arrPtrF[2] = mult;
arrPtrF[3] = div1;
arrPtrF[4] = pow;
Delegate D1(arrPtrF, SIZE)
cout<< D1[0](6, 7) + D1[0](1, 2)<<endl; 
}

результат 15

Я испытываю трудности с написанием оператора + (который в этом случае нужно взять взять параметр объекта)

сначала я попробовал это:

Delegate Delegate:: operator + (const Delegate& b)
{
Delegate tmp;

tmp.m_ptrF[i] = m_ptrF[i] + b.m_ptrF[i];

return tmp;
}

но это дало мне ошибку об i и b.m_ptrF-> инициализировал i и что-то о enum type.

затем я попробовал это:

int Delegate:: operator + (const Delegate& b)
{
int tmp;
int i, x,y;

    tmp = m_ptrF[i](x, y) + b.m_ptrF[i](x, y);

return tmp;
}

, но это дает мне ошибку-> инициализированный x, y, я знаю, что i - индекс, а x, y - параметры указатель на функцию.

что я могу сделать, чтобы она работала?

1 Ответ

1 голос
/ 27 апреля 2020

Похоже, D1[0](6, 7) должен выполнить 6 + 7, возвращая int, а D1[0](1, 2) должен выполнить 1 + 2, также возвращая int. Таким образом, добавление в D1[0](6, 7) + D1[0](1, 2) является обычным добавлением int.

Другими словами, вы не должны перегружать Delegate::operator+, вместо этого вы должны написать что-то вроде

XXX Delegate::operator[](int i) const
{
    ...
}

где XXX - это функция типа type, которая будет выполнять сложение с более поздними параметрами.

Так что XXX будет выглядеть примерно так:

class XXX
{
public:
    int operator()(int x, int y) const
    {
        ...
    }
    ...
};

Но XXX придется выполнять сложение, или вычитание, или что-то еще, в зависимости от ситуации.

Таким образом, выражение D1[0](6, 7) становится temp(6,7), где temp - это объект вышеописанного типа XXX.

At по крайней мере, это моя лучшая интерпретация. Понятно, что вы неправильно поняли свои требования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...