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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C ++我们可以创建类函数的覆盖吗?相关的知识,希望对你有一定的参考价值。

要有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 ++的一个非常有用的功能,称为函数重载。

另请注意,共享相同名称的函数必须与其唯一的返回类型不同,但它们的常量可能不同(这非常频繁且有用):

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"
}
另一答案

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

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

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

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

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

另一答案

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

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

另一答案

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

以上是关于C ++我们可以创建类函数的覆盖吗?的主要内容,如果未能解决你的问题,请参考以下文章

C 有函数覆盖吗? [复制]

JAVA-初步认识-第九章-抽象类-细节

sleep()函数怎么具体在c语言中怎么用?

我可以从c ++调用用cupy代码编写的cuda代码吗?

C 函数可以有多个签名吗? [复制]

C ++继承封闭类-这是一种好习惯吗?