【极客技术传送门】 : https://blog.csdn.net/Engineer_LU/article/details/135149485
在面向对象语言中,经常提到重载与重写,以下内容直观描述两者差异
其中,重写要求父类有虚函数
模式 | 函数名 | 参数列表 | 返回值 |
---|---|---|---|
重载 | 一样 | 不一样 | 不一样 |
重写 | 一样 | 一样 | 一样 |
下图所示 : 以下的func的参数列表多了int x或者返回值与父类函数不一样,因此为重载,父类声明虚函数的意义在于是否想要让子类重写
class Obj_A
{
private:
int a;
public:
virtual void func() {
}
};
class Obj_B : public Obj_A
{
private:
int a;
public:
void func(int x) {
}
int func() {
}
};
下图所示 : 父类func声明为虚函数,子类声明函数并且不改变函数名,不改变参数列表,不改变返回值,因此为重写
class Obj_A
{
private:
int a;
public:
virtual void func() {
}
};
class Obj_B : public Obj_A
{
private:
int a;
public:
void func() {
}
};
重载改变函数结构,重写不改变函数结构
技术交流QQ群 : 745662457
- 问题答疑,技术交流