作为面向对象的程序设计者,应该掌握的一条原则就是,应该“针对接口编程,而不是针对实现编程”,我认为,这句话包含两层意思,
一是针对类层次来说的,由于现实世界的复杂性,如果要对现实世界进行抽象的话,必然要涉及继承,因为这样不仅仅能保持程序设计的逻辑性,还可以实现一定程度上的软件复用。但是如果仅仅使用继承的,则会因为父类硬塞给子类它的属性与操作,而必然限制了子类的实现上的自由。
二、虚函数与抽象类,这两个概念是有区别的,但是他们都阐述了同一个原则,那就是针对接口编程,这里涉及到“运行时关联”这一概念,大概意思就是针对不同类实例对相同类型接口的实现调用,并不是静态的确定的,而是在运行时动态的确定的。这样,子类就不用机械的沿用父类的操作,而可以自由的针对需要来定义并调用相同类型的操作。
最后再来看一下虚函数与抽象类的区别,虚函数,基本特征是在函数定义前有virtual关键字,同时完成的功能是子类可以对该操作进行覆盖。而抽象类是含有纯虚函数的类,纯虚函数不同于虚函数,它不能在类中被实现,而必须等待子类来实现它,因此抽象类又可以叫做接口类,它与虚函数一起诠释了面向对象程序设计的多态性。
一是针对类层次来说的,由于现实世界的复杂性,如果要对现实世界进行抽象的话,必然要涉及继承,因为这样不仅仅能保持程序设计的逻辑性,还可以实现一定程度上的软件复用。但是如果仅仅使用继承的,则会因为父类硬塞给子类它的属性与操作,而必然限制了子类的实现上的自由。
二、虚函数与抽象类,这两个概念是有区别的,但是他们都阐述了同一个原则,那就是针对接口编程,这里涉及到“运行时关联”这一概念,大概意思就是针对不同类实例对相同类型接口的实现调用,并不是静态的确定的,而是在运行时动态的确定的。这样,子类就不用机械的沿用父类的操作,而可以自由的针对需要来定义并调用相同类型的操作。
最后再来看一下虚函数与抽象类的区别,虚函数,基本特征是在函数定义前有virtual关键字,同时完成的功能是子类可以对该操作进行覆盖。而抽象类是含有纯虚函数的类,纯虚函数不同于虚函数,它不能在类中被实现,而必须等待子类来实现它,因此抽象类又可以叫做接口类,它与虚函数一起诠释了面向对象程序设计的多态性。