C ++ Можем ли мы создавать переопределения функций класса? - PullRequest
0 голосов
/ 28 ноября 2010

Чтобы иметь как 3 функции с такими же именами, как:

bool VideoEncoder::AddFrame(AVFrame* frame, const char* soundBuffer, int soundBufferSize)
bool VideoEncoder::AddFrame( const char* soundBuffer, int soundBufferSize)
bool VideoEncoder::AddFrame(AVFrame* frame)

Можем ли мы?

Ответы [ 4 ]

4 голосов
/ 28 ноября 2010

Да, это называется перегрузкой функций и является стандартной функцией C ++.

Функции должны быть разрешаемыми в зависимости от количества и типов передаваемых им параметров.Это прервется, если, например, вы определите следующие перегрузки:

void A::foo(long n);
void A::foo(double n);

A a;
int i = 42;
a.foo(i);

Это приведет к неразрешимой неоднозначности.

3 голосов
/ 28 ноября 2010

Абсолютно. Функции в C ++ различаются по именам и аргументам (но не по возвращаемому значению). Поэтому для компилятора это просто разные функции (или методы).

Но когда аргументы отличаются, это называется « перегрузка », а не «переопределение». Последнее происходит, когда у вас есть функция с одинаковыми именами и аргументов в подклассе.

1 голос
/ 28 ноября 2010

Мало того, что это возможно, но это очень полезная функция C ++, называемая перегрузкой функций.

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

struct A
{
    void doSomething()       { std::cout << "A" << std::endl; }
    void doSomething() const { std::cout << "B" << std::endl; }

    // int doSomething();    /* illegal : differs only by return type */
    double doSomething(int); /* OK : differs by return type and parameters */
};

int main()
{
    A a;
    const A constA;

    a.doSomething();      // prints "A"
    constA.doSomething(); // prints "B"
}
1 голос
/ 28 ноября 2010

Да, это правильно.Перегруженные функции должны иметь одинаковое имя, тип возвращаемого значения и различный набор параметров.

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