C++ 三大特性
(1)继承
让某种类型对象获得另一个类型对象的属性和方法。
它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
常见的继承有三种方式:
-
实现继承:指使用基类的属性和方法而无需额外编码的能力。 -
接口继承:指仅使用属性和方法的名称、但是子类必须提供实现的能力。
例如,将人定义为一个抽象类,拥有姓名、性别、年龄等公共属性,吃饭、睡觉、走路等公共方法,在定义一个具体的人时,就可以继承这个抽象类,既保留了公共属性和方法,也可以在此基础上扩展跳舞、唱歌等特有方法。
(2)封装
数据和代码捆绑在一起,避免外界干扰和不确定性访问。
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏,例如:将公共的数据或方法使用public修饰,而不希望被访问的数据或方法采用private修饰。
(3)多态
同一事物表现出不同事物的能力,即向不同对象发送同一消息,不同的对象在接收时会产生不同的行为
(重载实现编译时多态,虚函数实现运行时多态)。
多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。允许将子类类型的指针赋值给父类类型的指针
实现多态有二种方式:覆盖(override),重载(overload)。
覆盖:是指子类重新定义父类的虚函数的做法。
重载:是指允许存在多个同名函数,而这些函数的参数表不同(或许参数个数不同,或许参数类型不同,或许两者都不同)。例如:基类是一个抽象对象——人,那教师、运动员也是人,而使用这个抽象对象既可以表示教师、也可以表示运动员。
其他:
《Effective C++》 继承扩展:条款34
public继承由函数接口继承+函数实现继承组成。
纯虚函数两个特性:①它们必须被任何继承了它们的具象class重新声明②在抽象class中通常没有定义。
-
声明一个纯虚函数的目的是为了让派生类只继承函数接口。只提供接口,派生类根据自身去实现。 -
声明非纯虚函数的目的是让派生类继承函数的接口和缺省实现。必须支持一个虚函数,如果不想重新写一个(override),可以使用基类提供的缺省版本。 -
声明非虚函数的目的是令派生类继承函数接口和一份强制性实现。 任何派生类都不应该尝试修改此函数,non-virtual函数代表不变性>特异性。不应该在派生类被重新定义。
封装:条款22
private等于封装,对客户隐藏成员变量,保留以后修改他们的权利,可以为“所有可能的实现”提供弹性。
public和protected改变会影响使用他们的用户代码,不封装意味着不可改变。
|