要使用3个具有相同名称的函数,例如:
bool VideoEncoder::AddFrame(AVFrame* frame, const char* soundBuffer, int soundBufferSize)
bool VideoEncoder::AddFrame( const char* soundBuffer, int soundBufferSize)
bool VideoEncoder::AddFrame(AVFrame* frame)
我们可以吗?
答案 0 :(得分:4)
是的,它被称为函数重载,是C ++的标准功能。
必须根据传递给它们的参数的数量和类型来解析这些函数。例如,如果您定义了以下重载,则会中断:
void A::foo(long n);
void A::foo(double n);
A a;
int i = 42;
a.foo(i);
这会产生无法解决的歧义。
答案 1 :(得分:3)
绝对。 C ++中的函数由它们的名称和参数区分(但不是它们的返回值)。所以对于编译器来说,这些只是不同的函数(或方法)。
但是当论点不同时,它被称为“重载”,而不是“覆盖”。后者是在子类中具有相同名称的和参数的函数。
答案 2 :(得分:1)
是的,这是正确的。重载函数必须具有相同的名称,返回类型和不同的参数集。
答案 3 :(得分:1)
不仅可以,而且它是C ++的一个非常有用的功能,称为函数重载。
另请注意,共享相同名称的函数的差异必须大于其唯一的返回类型,但它们的 const-ness 可能不同(这非常频繁且有用):< / p>
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"
}