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 ++我们可以创建类函数的覆盖吗?的主要内容,如果未能解决你的问题,请参考以下文章