c++ 第五章 多态性和虚函数

1、多态的作用?封装使得代码模块化,继承扩展已存在的代码,这二者都是实现代码重用,而多态实现的是借口重用,一个函数接口多种实现,靠的是虚函数。

2、多态与非多态的实质区别?函数地址是前期绑定还是后期绑定,编译期间确定函数调用地址的是前期绑定,是静态绑定,如函数重载的实现,函数的调用地址在运行的时候才能确定,属于后期绑定,是动态绑定,如多态的实现(常见用法:声明基类指针,指向任意子类对象,根据指向不同调用相应的虚函数)。

3、如果一个基类的某个成员函数定义为虚函数,那么会被派生类自动继承,即使省略了virtual,也是虚函数。

4、虚表的理解?只要类中有虚函数存在,那么该类对象会有一个虚表存在,用来记录这些虚函数,用该类或子类实例化对象的时候,会多分配四个字节指向这些虚表。若派生类继承于多个基类,并且这些基类都存在虚函数,那么派生类都会继承,且派生类对象会分配相应多个指针地址空间,用来指向多个虚表。

5、纯虚函数与抽象类?声明方式:virtual 返回类型 函数名(参数列表) = 0;主要用于基类中此函数无实现的意义,且起到统一接口的作用。只要类中有纯虚函数,此类就是抽象类,不能用来实例化对象,纯虚函数不能被自动继承,派生类若不给出重定义,给出具体实现,此派生类也为抽象类。

6、虚析构函数,构造函数不能声明为虚函数,析构函数可以,一般,如果类中定义了虚函数,析构函数也定义为虚,特别当类中有动态内存需要释放的时候。例如,A是基类B是派生类,A* pa = new B;delete pa;  若析构函数不定义为虚,那么派生类的析构函数不会被调用,有可能造成内存泄露。如定义为虚,先调用B类的析构函数,然后会回调A类析构函数。

7、虚函数不能定义为static的原因,本身就是动态的,和static矛盾。

8、虚函数只有通过指针、引用形式调用才可以实现多态,通过对象名调用,实现的是静态绑定。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值