C++课程笔记——虚函数与多态

一、知识梳理:


补充:多态与虚函数的关系:

    通常,多态要用虚函数来实现,而虚函数一般用基类指针来访问。

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++课程设计的选题之一,但无论选哪个题目,多态应用于登录类的这一部分知识都应该去掌握,所以,尽可能找时间自己动手试一下。继续努力吧!



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值