面向对象程序设计

Posted halo_vagabond

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象程序设计相关的知识,希望对你有一定的参考价值。

OOP概述

1.面向对象程序设计的核心思想数据抽象(封装)、继承和动态绑定(多态性)。

  通过数据抽象,我们可以将类的接口与实现分离;使用继承,可以定义相似的类型并对其相似关系建模;使用动态绑定,可以在一定程度上忽略相似类型的区别,而以统一的方式使用它们的对象。

  封装可以隐藏实现细节,使得代码模块化;继承可以扩展已存在的代码模块(类),它们的目的都是为了代码重用。而多态则是为了实现另一个目的,接口重用

2.虚函数意义:对于某些函数,基类希望它的派生类各自定义适合自己的版本,此时基类就将这些函数声明成虚函数(virtural)。

  任意非static成员都可以为虚成员

3.动态绑定当我们使用基类引用(或指针)调用一个虚函数时,将发生动态绑定。

定义基类

1.基类通常都应该定义一个虚析构函数,即使该函数不执行任何实际操作。这保证了在任何情况下,不会出现由于析构函数未被调用而导致的内存泄漏

class Quote
{
public:
    ...
    virtual ~Quote()=default;   //虚析构函数
}

2.成员函数与继承

  基类必须将两种成员函数区分开:一种是基类希望其派生类进行覆盖的函数,此类函数声明为虚函数;另一种是希望其派生类直接继承而不要改变的函数,非虚成员函数。

  虚函数的解析过程发生在运行时(直到运行时才会决定到底执行哪个版本);;对于非虚成员函数,其解析过程发生在编译时而非运行时(在编译时进行绑定)。

3.访问控制与继承

  派生访问说明符对于派生类的成员(及友元)能否访问其直接基类的没有影响。对基类成员的访问权限只与基类中的访问说明符有关。

  派生类能访问基类的public成员,而不能访问private成员。

  而对于protected成员:

  1)和private成员一样,protected成员对于类的用户来说是不可访问的。

  2)和public成员类似,proected成员对于派生类的成员和友元来说是可访问的。

 

以上是关于面向对象程序设计的主要内容,如果未能解决你的问题,请参考以下文章

Java中面向对象的三大特性之封装

Scala的面向对象与函数编程

python之路之前没搞明白4面向对象(封装)

JAVA方法的定义

面向面试编程代码片段之GC

PHP面向对象之选择工厂和更新工厂