重载的含义:对父类的方法,子类追加,屏蔽等扩展功能.
可什么样子才能重载了?
#include <iostream>
#include <conio>
using namespace std;
class a
{
public:
void virtual PlayA(void)
{
cout <<"Look Me"<<endl;
}
void PlayB(void)
{
cout<<"Kill You"<<endl;
}
} ;
class b :public a
{
public:
void PlayA(void)
{
cout<<"Look I"<<endl;
}
void PlayB(void)
{
cout<<"Help me"<<endl;
}
};
int main(int argc, char* argv[])
{
a A;
b B;
A.PlayA();
A.PlayB();
B.PlayA();
B.PlayB();
getch();
return 0;
}
//------------------------------------------------------------------------
输出结果: Look Me
Kill You
Look I
Help Me
我以为定义了父类声明了虚函数 子类扩展一下就行了 它默认调用父类的
不明白虚函数与重载有什么关系???
即使一般的函数体内调用下父类同名函数也是重载啊
重载虚函数可以动态确定对象的类型,以持行正确的代码
而其他的重载函数不行
请分清overload和override的区别:
两个函数名称相同,参数不同称为overload。
子类中写一个与父类的虚函数同名的函数称为override。
你的程序中没有体验出虚函数的作用来,要用指针或引用才可以体验出虚函数的多态作用。
main()改成下面的样子,然后把virtual加上或去掉就可以看到不同效果了。
a A;
a * pa;
b B;
pa = &A;
pa->PlayA();
pa = &B;
pa->PlayA();
getch();
return 0;
成员函数被重载的特征:
相同的范围;
函数名字相同;
参数不同;
virtual关键字可有可无。
覆盖是指派生类函数覆盖基类函数,特征是:
不同的范围;
函数名字相同;
参数相同;
基类函数必须有virtual关键字。