面向对象是(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. Java “hello word” 第一天

    //新建包和类 //java是包,c#是命名空间package test1;/** * 需求:练习一个hello word * 思路: * 1.定义一个类,因为java程序都是以类的形式存在的,类的形 ...

  2. Linux查看内存,负载状态

    Linux查看内存,负载状态 查看内存使用情况  www.ahlinux.com cat /proc/meminfo MemTotal:       16332644 kB MemFree:     ...

  3. caret 分类回归树 用法

    http://topepo.github.io/caret/feature-selection-overview.html

  4. aspx页面上输出xml的问题

    在aspx页面上输出xml,需要在后台输出编码格式和编码类型,如下代码: Response.Charset = "utf-8";//格式Response.ContentType = ...

  5. Session.Abandon-Session.Clear-Session.RemoveAll

    System.Web.UI.Page.Session属性和System.Web.HttpContext.Session属性 都是System.Web.SessionState.HttpSessionS ...

  6. (转)基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用

    原文地址:http://www.cnblogs.com/wuhuacong/p/3317223.html 在前面介绍了两篇关于我的基于MVC4+EasyUI技术的Web开发框架的随笔,本篇继续介绍其中 ...

  7. 【Head First Java 读书笔记】(五)编写程序

    第五章 编写程序 伪码:伪码能帮你专注于逻辑而不需要顾虑到程序语法 测试码:测试用的程序代码 真实码:实际代码 伪码 伪码是介于真正的java程序与正常英语之间的一种语言.伪码大致包括3部分:实例变量 ...

  8. BZOJ 4034[HAOI2015]树上操作(树链剖分)

    Description 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个操作,分为三种:操作 1 :把某个节点 x 的点权增加 a .操作 2 :把某个节点 x 为根的子树中所有点 ...

  9. 转 XlsReadWriteII 的博文(自留参考)

    如何使用XlsReadWriteII在Delphi中读取Excel文件 XLSReadWriteII v5.20.01a for Delphi XE5 x32下载地址: http://download ...

  10. 排序算法汇总(java实现,附源代码)

    整理系统的时候发现了原来写的各种算法的总结,看了一下,大吃一惊,那时候的我还如此用心,具体的算法,有的已经模糊甚至忘记了,看的时候就把内容整理出来,顺便在熟悉一下,以后需要的时候就可以直接过来摘抄了. ...