面向对象是(OOP)是特殊的、设计程序的概念性方法;包含以下特性:

  • 抽象;
  • 封装和数据隐藏;
  • 多态;
  • 继承;
  • 代码的可重用性;

为了实现这些特性并且将这些特性组合在一起,C++所做的最重要的改进是提供了类。

l  如何定义类;

l  如何为类提供公有部分和私有部分;

l  如何创建使用类数据的成员函数;

l  构造函数和析构函数是什么?是特殊的成员函数;创建和删除属于当前类的对象;

l  this指针;

l  运算符重载和继承,代码重用的基础;

==========================================

过程性编程和面向对象编程

优先考虑如何表示数据,数据的操作;

用户与数据交互的方式有:初始化、更新和报告;——即用户接口;

==========================================

抽象和类

处理生活中复杂性的方法是:简化和抽象;

将问题的本质特征抽象出来,并根据特征来描述解决方案;

接口描述了用户如何初始化,更新和显示数据;

类型是什么

指定基本类型完成了三项工作:

l  决定数据对象需要的内存数量;

l  决定如何解释内存中的位;

l  决定可使用数据对象执行的操作或方法;

对于内置类型来说,有关操作的信息被内置到编译器中。但在C++中定义用户自定义的类型时,必须自己提供这些信息。付出这些劳动换来了根据实际需要定制新数据类型的强大功能和灵活性。

C++中的类

是一种将抽象转换为用户定义类型的C++工具。它将数据表示和操纵数据的方法组合成一个整洁的包。

定义类:类规范由两个部分组成

类声明:以数据成员的方式描述数据部分,以成员函数的方式描述公有接口;

类方法定义:描述如何实现类成员函数;

什么是接口

接口是一个共享框架;供两个系统交互时使用;

对于类,我们所说的公共接口,由编写类的人提供的方法组成。接口让程序员能够编写与类对象交互的代码。公共(public)就是使用类的程序,就是用户。要使用某个类,必须了解其公共接口;要编写类,必须创建其公共接口。

开发一个类,并编写一个使用它的程序,需要完成多个步骤。

通常C++程序员将接口(类定义)放在头文件中,将实现(类方法的代码)放在源代码中。

访问控制

Private

Public

描述了对类成员的访问控制。使用类对象的程序都可以直接访问公有部分,但只能通过公有成员函数来访问对象的私有成员。公有成员函数时程序和对象的私有成员之间的桥梁,提供了对象和程序之间的接口。防止程序直接访问数据被称为数据隐藏。

此外C++还提供了第三个访问控制关键字protected。

类设计尽量将公有接口实现细节分开。公有接口表示设计的抽象组件。将实现细节放在一起并将它们与抽象分开被称为封装。数据隐藏(将数据放在类的私有部分)是一种封装,将实现的细节隐藏在私有部分中,也是一种封装。封装的另一个例子是,将类函数定义和类声明放在不同的文件中

OOP是一种编程风格。数据隐藏防止直接访问数据,还可以让开发者无需了解数据是如何被表示的。只需要知道成员函数需要什么参数及返回什么类型即可。原则是将实现细节从接口设计中分离出来。

从程序维护角度上来看:如果以后找到更好的数据表示及成员函数细节的方法,可以从细节处修改,而无需修改程序接口。这样维护起来更加容易。

私有还是公有

无论类成员是数据成员还是成员函数,都可以在类的公有部分或私有部分中声明它。由于数据隐藏是OOP主要的目标之一,因此数据项通常放在私有部分,组成类接口的成员函数放在公有部分。否则就无法从程序中调用这个函数。

实现类成员函数

为类声明中原型表示的成员函数提供代码。

成员函数区别与普通函数的特征:

定义成员函数时,使用作用域解析运算符(: :)来标识函数所属的类;

类方法可以访问类的private组件;

void Stock: : update(double price);

update()具有类作用域,Stock的其他成员函数不必使用作用域解析运算符就可以使用update()方法,这是因为它们属于同一个类,因此update()是可见的。在类声明和方法定义之外使用update()需要采取特殊措施。

方法的第二个特点是:可以直接访问类的私有成员。

类声明中的函数都是会被定义成内联函数;

创建类的对象

Stock kate, joe;

调用成员函数,使用对象的成员函数,和使用结构成员一样,通过成员运算符:

kate.show();

joe.show();

所创建的每个新对象都有自己的存储空间,用于存储其内部变量和类成员。但同一个类的所有对象共享同一组类方法,即每一种方法只有一个副本。

例如:假设kate,joe都是Stock对象,则kate.shares将占据一块内存,joe.shares将占据一块内存,但是kate.show()和joe.show()都调用同一个方法,也就是说,它们将执行同一个代码块,只是将这些代码用于不同的数据。

在OOP中调用成员函数,被称为发送消息。将同样的消息发送给两个不同的对象将调用同一个方法,但该方法被用于两个不同的对象。(对象有各自的数据成员,但是共享一套成员函数)

C++_类入门1-对象和类的介绍的更多相关文章

  1. day17-Python运维开发基础(类的封装 / 对象和类的相关操作、构造方法)

    1. 类的封装及相关操作 # ### oop 面向对象程序开发 """ #用几大特征表达一类事物称为一个类,类更像是一张图纸,表达的是一个抽象概念 "" ...

  2. 如何利用c++编写不能被继承、但可以在类外定义对象的类

    #include <iostream> #include<string> #include<map> #include<vector> #include ...

  3. day21——面向对象初识、结构、从类名研究类、从对象研究类、logging模块进阶版

    day21 面向对象的初识 面向对象第一个优点: 对相似功能的函数,同一个业务下的函数进行归类,分类. 想要学习面向对象必须站在一个上帝的角度去分析考虑问题. 类: 具有相同属性和功能的一类事物. 对 ...

  4. Java类锁和对象锁

    一.类锁和对象锁 二.使用注意 三.参考资料 一.类锁和对象锁 类锁:在代码中的方法上加了static和synchronized的锁,或者synchronized(xxx.class) 对象锁:在代码 ...

  5. python-面向对象-02_类和对象

    类和对象 目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的 两个 核心概念 1.1 类 类 是对一群具有 相同 特征 或者 行为 的事物的一个统 ...

  6. python的类和实例化对象

    一切皆对象,类也是对象,类来自于元类type,如果一个类没有声明自己的元类,默认它就是元类. 即类是元类的实例,通过type(类)会显示type,而实例来自于类. 类有两个属性,数据属性和函数属性,下 ...

  7. mfc 类的const对象

    知识点 类的const对象 const类的成员函数 一. 类的const对象 const 意谓着只读 意谓着所标记的类成员变量不成出现在=号的左边. 构造函数除外. ,,); //比如在存放出生日期的 ...

  8. 类属性与对象实现,init方法的作用,绑定方法,绑定方法与普通函数的区别,继承,抽象与继承,派生与覆盖

    今日内容: 1.类属性与对象属性 2.init方法的作用 3.绑定方法 4.绑定方法与普通函数的区别(非绑定方法) 5.继承 6.抽象与继承 7.派生与覆盖 1.类属性与对象属性 类中应该进存储所有对 ...

  9. Java 学习:对象和类

    对象和类 从认识的角度考虑是先有对象后有类.对象,是具体的事物.类,是抽象的,是对对象的抽象. 从代码运行角度考虑是先有类后又对象.类是对象的模板. 对象:对象是类的一个实例,有状态和行为. 类:类是 ...

随机推荐

  1. Gym101350 J Lazy Physics Cat

    参考博客:https://blog.csdn.net/lengqiu2015/article/details/76855681#reply 题意 给出一个长度为n的01串 我们定义F(x,y)是区间[ ...

  2. Python编写两个数的加减法游戏

    目标: 1.实现两个数的加减法 2.回答者3次输错计算结果后,输出正确结果,并询问回答者是否继续 1.使用常规函数实现两个数的加减法游戏 代码如下: #!/usr/bin/env python # - ...

  3. 下载Redis

    1.下载当前Redis 官网:https://redis.io/ 当前稳定版本是4.0.11,如下图,点Download it下面的链接进行下载 2.下载历史版本的Resis 网址: http://d ...

  4. 【转载】Python BeautifulSoup匹配字符串

    作者:鸡仔说链接:https://www.jianshu.com/p/ceb99aed4b2e來源:简书 BeautifulSoup中可以通过name和attrs去定位名称和属性,以找到特定的html ...

  5. anacondas 下 安装xgboost & keras

    mac : 安装anaconda, cd到anaconda 目录下 pip install xgboost 测试: 在当前的¥ python , 进入python 环境 import xgboost ...

  6. 使用pycharm运行调试scrapy

    摘要 Scrapy是爬虫抓取框架,Pycharm是强大的python的IDE,为了方便使用需要在PyCharm对scrapy程序进行调试 python PyCharm Scrapy scrapy指令其 ...

  7. ShopNc实例化对象

    1.模型 $model_member = Model('member'); 2.接口 require_once BASE_ROOT_PATH.'/member/api/smiMember/action ...

  8. Servlet入门第一天

    1. 使用 JavaEE 版的 Eclipse 开发动态的 WEB 工程(JavaWEB 项目) 1). 把开发选项切换到 JavaEE 2). 可以在 Window -> Show View ...

  9. MongoDB整理笔记の新增Shard Server

    1.启动一个新Shard Server 进程 [root@localhost ~]# mkdir /data/shard/s2 [root@localhost ~]# /Apps/mongo/bin/ ...

  10. window中启动vs后鼠标无法移动

    你停止wisptis.exe这个进程,在c:\Windows\System32下删除wispitis.exe就可以了!