day10

回顾:
1 子类拷贝构造和拷贝赋值
2 多重继承
1)一个子类同时继承多个基类
2)向上造型,会自动地址偏移
3)名字冲突问题
  解决--》显示加作用域限定
4)钻石继承问题
  A
 / \
B   C
 \ /
  D
解决--》虚继承
=========================
今天继续多态
二十二 多态(Polymorphic)
1 多态的概念
  如果将基类中的某个成员函数声明为虚函数,那么子类中与该函数具有相同原型的成员函数就也是虚函数,并且对基类中的版本形成覆盖。
  这时,通过指向子类对象的基类指针,或者通过引用子类对象的基类引用,调用虚函数,实际被调用的将是子类中的覆盖版本,而不是基类中原始版本,这种语法现象称为多态。
 
2 虚函数覆盖的条件
1)只有类的成员函数才能被声明为虚函数,全局函数和静态成员、构造函数都不能声明为虚函数。
2)只有基类中以virtual关键字修饰的成员函数才能作为虚函数被子类覆盖,而与子类的virtual关键字无关。
3)虚函数在子类和基类中必须有相同的函数签名,即相同函数名和形参表、常属性。
4)如果基类的虚函数返回类类型以外数据,那么该函数在子类的覆盖版本必须返回相同类型。
5)如果基类的虚函数返回类类型的指针(A*)或引用(A&),那么允许子类的覆盖版本返回其子类类型的指针(B*)或
引用(B&)--类型协变。
class A{};
class B:public A{};
 
======================================
3 多态的条件
1)多态的特性除了要在基类中声明虚函数,并在子类中形成有效的覆盖,还必须通过指针或引用来调用虚函数,才能表现出来。
2)调用虚函数的指针也可能是this指针,只有它是一个指向子类对象的基类指针,同样可以表现多态的语法特性。
 
4 纯虚函数、抽象类、纯抽象类
1)纯虚函数
virtual 返回类型 函数名(形参表)[const] = 0;
 
2)抽象类
  包含纯虚函数的类就为抽象类,抽象类不能被实例化为对象;如果子类没有覆盖抽象基类中的纯虚函数,那么该子类就也是一个抽象类。
 
3)纯抽象类
  如果一个抽象类中的所有成员函数都是纯虚函数,那么该类就是一个纯抽象类。
 
5 多态语法特性实现原理(了解)
  参考poly.jpg
 
6 虚析构函数
  如果将基类的析构函数声明为虚函数,那么子类的析构函数就也是一个虚函数,并且对基类的虚函数构成有效的覆盖,也可以表现多态的特性。
  这时delete一个指向子类对象的基类指针,实际被调用的将是子类的析构函数,而子类析构函数会自动调用基类的析构函数,避免内存的泄露。
 
=======================================
小项目《薪资计算》
    员工
   /     |     \
 技术   经理   销售
   \   /    \  /
 技术主管   销售主管
 
员工的属性:
  姓名、工号、职位级别、基本工资、绩效工资、出勤率
经理:绩效奖金(元/月)
技术员:研发津贴(元/小时)
销售员:提成比率(百位之几)
 
薪资=基本工资+绩效工资
基本工资=职位级别额度*出勤率
 
绩效工资 因职位不同而异
普通员工:基本工资一半
经理:绩效奖金*绩效因数(输入)
技术员:研发津贴*工作小时数*进度因数(输入)
销售员:销售额度(输入)*提成比率
技术主管:(技术员绩效工资+经理绩效工资)/2
销售主管:(销售员绩效工资+经理绩效工资)/2
结果:打印员工数据,输入必须输入必要数据,计算薪资
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值