一、知识梳理:
补充:多态与虚函数的关系:
通常,多态要用虚函数来实现,而虚函数一般用基类指针来访问。
1、虚函数的定义:关键字virtual ;
2、虚函数的访问:一般来说,虚函数要用基类指针来访问,需要注意的是在公有继承下,外部访问形式只能访问类的公有成员,内部访问则可以访问保护、公有两种成员。
3、几个注意事项:
①、注意虚函数的虚特性是可以被继承的,例如下面程序:
#include<bits/stdc++.h>
using namespace std;
class A
{
protected:
int x;
public:
A(int t):x(t){}
virtual void dis(){cout<<"x="<<x;}
};
class B:public A
{
protected:
int y;
public:
B(int t1,int t2):A(t1),y(t2){}//注意初始化Father
void dis(){cout<<"y="<<y;cout<<x<<endl;}
};
class C:public B
{
protected:
int z;
public:
C(int t1,int t2,int t3):B(t1,t2),z(t3){}
void dis(){cout<<"z="<<z<<endl;}
};
int main()
{
B *bb=new C(1,2,3);//******
bb->dis();
return 0;
}
运行结果:z=3;
显然,派生类B中的dis函数并没有加关键字virtual,但它还是保持了虚特性。
所有,是否可以有以下结论:多态能否实现的关键是在于相应基类的同名函数是否具有虚特性。
另外在实现多态时,基类中的虚函数,与派生类中的对应函数,必须要有完全相同的函数名、返回类型、形参表。
②、构造函数不能是虚函数,而析构函数可以是虚函数,而且析构函数定义为虚函数可以有效避免内存泄漏的发生。
4、最后关于纯虚函数,即基类中的没有明确的实现代码,只是为各个派生类提供了一个公共界面,可以有如下两种定义形式:
virtual void dis(){}
virtual void dis()=0;
二、心得:
对于这部分内容,根据目前学到的知识,多态一般用于实现 ”用户登录时不同类型的用户(例如学生和图书馆管理员)进入不同的操作界面 ”这一功能。但因为自己还没有具体去实现,所以可以说对于多态与虚函数这一部分的内容,还掌握的很不到位,尽管登录类的实现作为C++课程设计的选题之一,但无论选哪个题目,多态应用于登录类的这一部分知识都应该去掌握,所以,尽可能找时间自己动手试一下。继续努力吧!