C++中 overload、redefine 和 override的含义和区别
Overloading Functions
CONCEPT
Overloading function (重载函数):在C++中,两个或者两个以上的函数可以有完全相同的函数名,只要它们的参数列表不同,程序就能区分出被调用的函数是哪一个。这种情况就叫做重载函数。
更通俗的讲,C++通过函数签名来区分不同的函数。函数签名就像函数的ID一样。只要函数签名有区别,即便几个函数拥有一样的名字,C++也能分辨它们。
函数签名
在同一个命名空间内,C++的函数签名(function signature)包括:函数名、参数个数、参数类型、参数顺序。
函数签名并不包含返回值的类型。如果两个函数仅仅返回值类型不同,C++将无法区别它们,编译的时候会报错,如下:
int sumValues(double val1, double val2)
{
return val1 + val2;
}
double sumValues(double val1, double val2)
{
return val1 + val2;
}
overload.cpp: In function ‘double sumValues(double, double)’:
overload.cpp:29:8: error: ambiguating new declaration of ‘double sumValues(double, double)’
double sumValues(double val1, double val2)
^~~~~~~~~
overload.cpp:24:5: note: old declaration ‘int sumValues(double, double)’
int sumValues(double val1, double val2)
^~~~~~~~~
函数参数列表不同(参数个数、参数类型、参数顺序三者),例如:
double calcWeeklyPay(int, double);
double calcWeeklyPay(double);
Redefining functions
CONCEPT
Redefining Base Class Function (重定义基类中的函数):当派生类中有与基类同名的函数,即为重定义。但是基类派生类中的这两个同名函数的参数列表不一定要不同,可以相同。因为派生类的对象将调用派生类中的此重定义函数,基类的对象将调用基类中的此函数,编译器不用通过参数列表的不同来区分到底要调用哪个函数,而是通过调用的此函数的对象的类别来决定调用基类还是子类中的重定义函数。
Redefine Example
基类为 GradedActivity,子类为 PassFailActivity。子类 PassFailActivity 重定义了基类中的 getLetterGrade() 函数。
基类的 getLetterGrade() 根据所获得的分数返回对应的 “A”、“B”、“C” 等级。
子类的 getLetterGrade() 判断分数是否通过及格线,通过返回 “P” 表示 pass, 没有通过返回 “F” 表示 fail。
GradedActivity.h:
#pragma once
class GradedActivity
{
protected:
double score;
public:
GradedActivity() {
score = 0.0; }
GradedActivity(double s) {
score = s; }
void setScore(double s) {
score = s; }
double getScore() const {
return score; }
char getLetterGrade() const;
};
PassFailActivity.h:
#pragma once
#include "GradedActivity.h"
class PassFailActivity : public GradedActivity
{
protected:
double minPassingScore;
public:
PassFailActivity() : GradedActivity() {
minPassingScore = 0.0; }
PassFailActivity(double mps) : GradedActivity() {
minPassingScore = mps; }
void setMinPassingScore(double mps) {
minPassingScore = mps; }
double getMinPassingScore() const {
return minPassingScore; }
char getLetterGrade() const
最低0.47元/天 解锁文章
1021

被折叠的 条评论
为什么被折叠?



