C++中重载、覆盖和隐藏

时间:2023-03-09 07:35:28
C++中重载、覆盖和隐藏

一,多态性

1,(1)声明了基类的指针,该指针指向基类,该指针永远调用自己的成员函数,不管函数是否为虚函数。

(2)声明了派生类的指针,该指针指向该派生类,该指针永远调用自己的成员函数,不管函数是否为虚函数。

(3)声明了基类的指针,该指针指向任意一个子类对象,该指针调用一个函数(此函数在基类存在,而且在子类中被重新定义),此时编译系统不清楚该调用哪一个函数,而出错。我们可以将该函数设定为虚函数,则程序运行时候,编译系统会知道调用的是基类函数还是子类函数,此即多态。注:如果调用的函数不是虚函数,则调用自己类中的成员函数。如果指针被声明为基类,尽管它指向子类对象,仍然是基类指针。

2,子类重定义父类成员函数方法,被称为覆盖或重写。覆盖的函数都是虚函数。

3,满足虚函数条件或覆盖的特征是:
   (1)不同的范围(分别位于派生类与基类);
   (2)函数名字相同;
   (3)参数相同;
   (4)基类函数必须有virtual 关键字。

二,成员函数重载

成员函数被重载的特征:
(1)相同的范围(在同一个类中);
(2)函数名字相同;
(3)参数不同;
(4)virtual 关键字可有可无。

三,成员函数隐藏

看如下代码:

Base.h

#include <iostream>
using namespace std; class Base{
public:
void fn(int x){
cout << "Base" << x << endl;
}
void fn1(int x){
cout << "Base1" << x << endl;
}
};

SubClass.h

#include <iostream>
using namespace std; class SubClass :public Base{
public:
void fn(float x){
cout << "SubClass" << x << endl;
}
void fn1(int x){
cout << "SubClass1" << x << endl;
}
};

main.cpp

#include <iostream>
#include "A.h"
#include "B.h"
#include "C.h"
using namespace std; int main()
{
C c();
cout << c.GetData() << endl;
cout << c.A::GetData() << endl;
cout << c.B::GetData() << endl;
cout << c.C::GetData() << endl;
cout << c.doGetData() << endl;
cout << c.A::doGetData() << endl;
cout << c.B::doGetData() << endl;
cout << c.C::doGetData() << endl;
return ;
}

运行结果:

aaarticlea/png;base64,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" alt="" />

fn()函数不符合虚函数条件,不是虚函数。

从SubClass角度来说,其有void fn(float x)函数,从Base继承了void fn(int x)函数,因此这两个函数在SubClass内应该是重载的,因此主函数中SubClass对象sc,sc.fn(3.1f)应该调用void fn(float x)函数,sc.fn(1)应该调用void fn(int x),但是运行结果显示两个都调用了void fn(float x)函数,这是因为Base中的void fn(int x)函数被隐藏了。

主函数中sc.fn1(2);时候,通过结果知道调用了void fn1(int x)函数,Base中的void fn1(int x)函数被隐藏了。

因此知道符合函数隐藏条件是:

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏。注意别与重载混淆。
(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual关键字。此时,基类的函数被隐藏。注意别与覆盖混淆。