多态&多态的对象模型

什么是多态?

      多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程领域的核心概念。多态(polymorphism),字面意思多种形态。C++多态性是通过虚函数来实现的,虚函数允许子类重新定义成员函数,而子类重新定义父类的做法称为覆盖(override),或者称为重写。

三个易混淆概念:

1.重载
(1)在同一个作用域下。
(2)函数名相同。
(3)参数不同(个数,类型不同)。
(4)返回值可以不同。
2.重定义/隐藏: 
(1)一个在父类,一个在子类。
(2)函数名相同。
(3)在基类和派生类中只要不构成重写就是重定义。
3.重写/覆盖: 
(1)一个在父类,一个在子类。
(2)函数名相同,参数相同,返回值相同,(协变例外)。
(3)基类函数必须有virtual关键字。
(4)访问限定符可以不同。

什么是继承?

     继承是面向对象复用的重要手段。通过继承定义一个类,继承是类型之间的关系建模,共享公有的东西,实现各自本质不同的东西。

三种继承关系下基类成员在派生类的访问关系变化: 


总结:
1. 基类的私有成员在派生类中是不能被访问的,如果一些基类成员不想被基类对象直接访问,但需要在派生类中能访问,就定义为保
护成员。可以看出保护成员限定符是因继承才出现的。
2. public继承是一个接口继承,保持is-a原则,每个父类可用的成员对子类也可用,因为每个子类对象也都是一个父类对象。
3. protetced/private继承是一个实现继承,基类的部分成员并未完全成为子类接口的一部分,是 has-a 的关系原则,所以非特殊情
况下不会使用这两种继承关系,在绝大多数的场景下使用的都是公有继承。
4. 不管是哪种继承方式,在派生类内部都可以访问基类的公有成员和保护成员,但是基类的私有成员存在但是在子类中不可见(不能
访问)。
5. 使用关键字class时默认的继承方式是private,使用struct时默认的继承方式是public,不过最好显示的写出继承方式。
6. 在实际运用中一般使用都是public继承,极少场景下才会使用protetced/private继承.

继承与转换--赋值兼容规则--public继承
1. 子类对象可以赋值给父类对象(切割/切片
2. 父类对象不能赋值给子类对象
3. 父类的指针/引用可以指向子类对象
4. 子类的指针/引用不能指向父类对象(可以通过强制类型转换完成)


单继承与多继承:
1. 单继承:一个子类只有一个直接父类时称这个继承关系为单继承
2. 多继承:一个子类有两个或以上直接父类时称这个继承关系为多继承

构成多态的两个条件:
1.虚函数的重写
2.父类的指针和引用

(注意:若父类中构造了虚函数,子类中该虚函数重写可以不加virtual关键字,依然可以构成虚函数的重写。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值