C ++我们可以创建类函数的覆盖吗?

问题描述 投票:0回答:4

要有3个具有相同名称的函数,例如:

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

我们可以吗?

c++ oop
4个回答
1
投票

它不仅可行,而且是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"
}

4
投票

是的,它被称为函数重载,是C ++的标准功能。

必须根据传递给它们的参数的数量和类型来解析这些函数。例如,如果您定义以下重载,则会中断:

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

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

这将产生无法解决的模糊性。


3
投票

绝对。 C ++中的函数由它们的名称和参数区分(但不是它们的返回值)。所以对于编译器来说,这些只是不同的函数(或方法)。

但是当论点不同时,它被称为“重载”,而不是“重写”。后者是在子类中具有相同名称和参数的函数。


1
投票

是的,这是正确的。重载函数必须具有相同的名称,返回类型和不同的参数集。

© www.soinside.com 2019 - 2024. All rights reserved.