我对这两个术语有点困惑,很高兴能澄清一些疑问。
据我所知,function overloading意味着在同一个类中有多个方法具有相同的名称,但参数的数量不同,参数的类型不同,或者参数的序列与返回类型无关,这对损坏的函数名称没有任何影响。
上述定义是否也包括"....in同一类或跨相关类(通过继承相关).....“
Function Overriding与虚函数、相同的方法签名(在基类中声明为虚)以及在子类中的实现被重写有关。
我在想一个场景,以下是代码:
#include <iostream>
class A
{
public:
void doSomething(int i, int j)
{
cout<<"\nInside A::doSomething\n";
}
};
class B: public A
{
public:
void doSomething(int i, int j)
{
cout<<"\nInside B::doSomething\n";
}
};
int main()
{
B obj;
obj.doSomething(1,2);
return 0;
} 在上面的场景中,可以说:
派生类中的方法overrides基类OR中的方法
派生类中的方法基类中的overloads方法
重载是否适用于类作用域,重写术语是否不一定适用于虚函数?
我认为它应该是overrides,但只是需要澄清一下,因为我碰巧记得术语overriding专门用于虚函数。
发布于 2011-03-23 22:14:25
在这种情况下,两者都不是。派生类方法hides基类方法。
发布于 2011-05-06 20:32:57
名称可以通过在嵌套声明区域或派生类中显式声明相同的名称来隐藏。
如果在类Base和派生类(直接或间接从Base派生)中声明虚拟成员函数vf,则声明具有与Base::vf相同名称和相同参数列表的成员函数vf,则Derived::vf也是虚的,并且它重写Base::vf。
当为同一作用域中的单个名称指定了两个或多个不同的声明时,该名称被称为重载。
与
因此,这显然是一个隐藏的案例。
发布于 2011-05-06 20:55:44
Function overloading是指您有几个函数的参数列表不同,或者,如果它们是成员函数,则它们的不同(在其他一些语言中,您也可以基于返回类型进行重载,但C++不允许这样做。)
示例:
void f(int);
void f(char);
class some_class {
void g();
void g() const;
};Function overriding是指当您使用相同的签名重新定义一个基类函数时。通常,只有当基类函数是虚函数时,这才有意义,否则要调用的函数(基类或派生类的版本)是在编译时使用引用/指针的静态类型确定的。
示例:
class base {
void f();
virtual void g();
};
class derived : public base {
void f();
void g();
};Function name 是指在派生类(或内部作用域)中定义的函数具有与基类(或外部作用域)中声明的同名函数不同的参数列表。在这种情况下,派生类的函数隐藏了基类函数。您可以通过使用using声明显式地将基类函数带入派生类的作用域来避免这种情况。
示例:
class base {
void f(int);
void f(char);
};
class derived1 : public base {
void f(double);
};
void f()
{
derived1 d;
d.f(42); // calls derived1::f(double)!
}
class derived2 : public base {
using base::f; // bring base class versions into derived2's scope
void f(double);
};
void g()
{
derived2 d;
d.f(42); // calls base::f(int)!
}只是为了防止不清楚:基于这些定义,我会在这里调用有问题的场景覆盖。
https://stackoverflow.com/questions/5406533
复制相似问题