Разобрать перегрузку оператора класса C ++ и список инициализации конструктора - PullRequest
0 голосов
/ 23 ноября 2018

Можете ли вы помочь переписать этот класс более многословно, т. Е. (Без списка инициализации конструктора и перегрузки оператора float) или объяснить, как он работает

class HigPassFilter
{
public:
    HigPassFilter(float reduced_frequency)
        : alpha(1 - exp(-2 * PI*reduced_frequency)), y(0) {}

    float operator()(float x) {
        y += alpha * (x - y);
        return x - y;
    }
    int myfunc(bool x) { return 1; }

private:
    float alpha, y;
};

1 Ответ

0 голосов
/ 23 ноября 2018

Я объясню, как это работает:

class HigPassFilter
{
public:
    // Constructor of the class, with one parameter.
    HigPassFilter(float reduced_frequency)
    // initializer list initializes both data members of the class,
    // 'alpha' will be set to the result of '1 - exp(-2 * PI*reduced_frequency)'
    // and 'y' will be set to 0
        : alpha(1 - exp(-2 * PI*reduced_frequency)), y(0)
   // the body of the constructor is empty (good practice)
   {}

   // An overload of operator(), which performs a mathematical operation.
   // It will increment 'y' by 'alpha * (x - y)' and
   // return the difference of 'x' and 'y'
   float operator()(float x) {
        y += alpha * (x - y);
        return x - y;
    }

    // a simple function that returns always 1 and
    // will not used its parameter, causing an unused warning (bad practice)
    int myfunc(bool x) { return 1; }

private:
    // private data members
    float alpha, y;
};

Подробнее в Что это за странный синтаксис с двоеточием («:») в конструкторе? .Списки инициализаторов - очень важная особенность C ++, поэтому я советую вам потратить некоторое время на их изучение.В большинстве случаев вы инициализируете элементы данных в списке инициализаторов, поэтому эта функция все равно существует.

Дополнительная информация: Зачем переопределять оператор ()?

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