当前位置: 首页 > 科技观察

C++覆盖率和重载的区别

时间:2023-03-16 00:57:20 科技观察

1。Coverage覆盖率也称为override。覆盖是指在类中,子类覆盖从基类继承的功能。函数名、返回值、参数列表必须与基类相同。当子类的对象调用成员函数时,如果成员函数被重写,则调用子类中被重写的版本,否则调用从基类继承的函数。如果子类重写了基类的虚函数,就可以用来实现多态。当子类重新定义基类的虚函数时,基类指针可以根据分配给它的不同子类指针动态调用子类中的虚函数,从而实现动态绑定,这就是多态。2.重载重载允许同一个作用域中存在多个同名函数。这些函数的参数列表是不同的。编译器根据函数的不同形参表对同名函数的名称进行修改,这些同名函数就变成了不同的函数。如:voidFun(inta);voidFun(doublea);voidFun(inta,intb);voidFun(doublea,intb);重载需要不同的参数列表,例如不同的参数类型、不同的参数个数、不同的参数顺序。如果只是函数的返回值不同,就没有办法重载。例如:intFun(inta)voidFun(inta)函数是C++编译的,在符号库中的名称与C语言中的名称不同。假设一个函数的原型是:voidfoo(intx,inty);C编译器编译后符号库中的函数名为_foo;C++编译器将生成类似_foo_int_int的名称。这样的名字包括函数名、函数参数个数和类型信息,C++正是依靠这种机制来实现函数重载的。3、重载和覆盖的区别重载要求函数名相同,但参数列表必须不同;覆盖需要相同的函数名、参数列表和返回值。重载描述了同一个类中不同成员函数之间的关系;覆盖率是子类和基类之间不同成员函数之间的关系。重载的确定是在编译时确定的,是静态的;虚函数是在运行时动态确定的。