c++有面向对象程序设计的特性,这其中类的封装、继承、以及多态的实现为面向对象的程序设计提供了很好的帮助。首先谈谈继承,c++可以单继承和多继承,而多继承的概念允许程序在设计中有多个父类,这和现实的需求更加吻合,但是代码在实现的时候却会产生二义性,于是乎出现了虚继承、虚函数等定义。这虽然让C++在语法上变得更加复杂,但是也为解决问题做了限定。
继承使子类拥有父类的成员变量和成员函数,父类在设计上可以定义为抽象类,既纯虚函数,纯虚函数为了定义类的实现方法,所以在UML建模的时候,考虑对象与对象的关系,啥时候该用继承来实现,简单来说UML中的泛化就是继承。设计为父类的大多是某一类事物的抽象、涵盖。比如我们设计一个动物类做为父类、那么就可以有大象、狮子等子类来继承它,拥有父类的例如奔跑、吃饭等行为属性。UML中用实线的空心三角形连结来实现。而多继承中如果出现菱形继承其实两个父类都是独立拥有一份祖父类,这一点需要特别注意。在纯虚函数中类似于接口的定义如果有个类实现了纯虚接口,在子类中重写了父类的实现,那么这种应该属于UML中实现,实现在UML用虚线的三角形连线来表示。
C++类的设计可以有PUBLIC、PROTECT、PRIVATE几个属性,而在继承的时候也可以定义这几个关键字来决定类的行为和属性是否共享,类设计的原则上开闭原则、好的设计不是全部定义为公有的,是适当。该公开就公开,该私有就私有。在对外有限度的访问权限。而这一点的体现可以所在UML设计上的依赖和关联。某个类作为另一个类的成员变量,或者参数,再者,在一个类中调用另一个的方法,从而改变了类,那么这两个类就产生了关联。这种定义在设计上常常会出现,但是范围又比较模糊,依赖定义越多程序解耦就越困难,因为一个类的方法可以被其他类调用,这样修改了实现那么就会影响其他类的结果。依赖在UML设计中虚线的箭头来实现。而关联有单向关联和双向关联。
而UML的聚合和组合,聚合就是局部与整体的关系,聚合用箭头和空心菱形来实现,而组合用实现菱形和箭头来表现。因为组合是表示组合的类是共存亡的关系。
C++的多态是一个重点,多态中体现在类设计的虚函数以及动态联编上。用父类的指针指向子类A的时候,虚函数的实现就是调用子类的虚函数。