面向对象——封装、继承、多态(多态的四种类型)
1. 封装
把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
-
public
: 所有实体都可以访问
-
protected
: 只允许本类(和子类)的成员函数访问
-
private
: 只允许本类的成员函数+友元类或友元函数访问(友元类暂时还没学习)
2. 继承
派生类(子类) : 基类(父类)。
举例:cat类继承了Felid(猫科动物类)
class Felid {
public:
};
class Cat : public Felid {
public:
};
3. 多态
本模块主要参考了 The Four Polymorphisms in C++ (翻译+一点改动,英文描述可能更清晰,建议最好看原文,我这里主要是方便复习)
总结:多态就是一个函数 / 运算符… 的多种不同实现形态(同名,但是用法 / 效果不同)。
使用哪一个具体实现呢?(要根据参数,子类类型…来确定)
-
运行时多态:运行时确定使用哪一个函数;
-
编译时多态:编译时确定使用哪一个具体函数。
四种类型,分别是(后面分别有例子介绍):
-
子类型多态(Subtype polymorphism,运行时多态)():虚函数;
-
参数多态(Parametric polymorphism,编译时):类模板、函数模板;
-
重载(Ad-hoc polymorphism / overloading,编译时):函数重载、运算符重载;
-
强制多态(Coercion Polymorphism,编译 / 运行时)((implicit or explicit) casting):基本类型转换、自定义类型转换;
3.1 子类型(运行时)多态
![polymorphic-cats](https://img-blog.csdnimg.cn/img_convert/710b575016fc8c7723e49830f2637916.gif)
猫科动物类:Felid
。假定所有猫科动物都会叫:meow()
但是每种猫咪叫法不同,家猫cat
, 老虎tiger
, 豹猫Ocelot
各有不同的叫声,因此Felid
用虚函数virtual void meow() = 0;
,而各自真实的叫声,在子类家猫cat
, 老虎tiger
, 豹猫Ocelot
中具体实现
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)