C++_类入门1-对象和类的介绍
面向对象是(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-对象和类的介绍的更多相关文章
- day17-Python运维开发基础(类的封装 / 对象和类的相关操作、构造方法)
1. 类的封装及相关操作 # ### oop 面向对象程序开发 """ #用几大特征表达一类事物称为一个类,类更像是一张图纸,表达的是一个抽象概念 "" ...
- 如何利用c++编写不能被继承、但可以在类外定义对象的类
#include <iostream> #include<string> #include<map> #include<vector> #include ...
- day21——面向对象初识、结构、从类名研究类、从对象研究类、logging模块进阶版
day21 面向对象的初识 面向对象第一个优点: 对相似功能的函数,同一个业务下的函数进行归类,分类. 想要学习面向对象必须站在一个上帝的角度去分析考虑问题. 类: 具有相同属性和功能的一类事物. 对 ...
- Java类锁和对象锁
一.类锁和对象锁 二.使用注意 三.参考资料 一.类锁和对象锁 类锁:在代码中的方法上加了static和synchronized的锁,或者synchronized(xxx.class) 对象锁:在代码 ...
- python-面向对象-02_类和对象
类和对象 目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的 两个 核心概念 1.1 类 类 是对一群具有 相同 特征 或者 行为 的事物的一个统 ...
- python的类和实例化对象
一切皆对象,类也是对象,类来自于元类type,如果一个类没有声明自己的元类,默认它就是元类. 即类是元类的实例,通过type(类)会显示type,而实例来自于类. 类有两个属性,数据属性和函数属性,下 ...
- mfc 类的const对象
知识点 类的const对象 const类的成员函数 一. 类的const对象 const 意谓着只读 意谓着所标记的类成员变量不成出现在=号的左边. 构造函数除外. ,,); //比如在存放出生日期的 ...
- 类属性与对象实现,init方法的作用,绑定方法,绑定方法与普通函数的区别,继承,抽象与继承,派生与覆盖
今日内容: 1.类属性与对象属性 2.init方法的作用 3.绑定方法 4.绑定方法与普通函数的区别(非绑定方法) 5.继承 6.抽象与继承 7.派生与覆盖 1.类属性与对象属性 类中应该进存储所有对 ...
- Java 学习:对象和类
对象和类 从认识的角度考虑是先有对象后有类.对象,是具体的事物.类,是抽象的,是对对象的抽象. 从代码运行角度考虑是先有类后又对象.类是对象的模板. 对象:对象是类的一个实例,有状态和行为. 类:类是 ...
随机推荐
- Linux修复MBR扇区故障
给虚拟机增加一块硬盘,用于备份mbr的信息 fdisk -l 查看硬盘系统是否认识 fdisk /dev/sdb 进行分区 fdisk -l 查看分区是否出来 mkfs -t ext4 /dev/sb ...
- os.chdir("/deepmatching") OSError: [Errno 2] No such file or directory: '/deepmatching'
#os.chdir("/deepmatching")os.chdir(os.path.dirname(os.path.abspath("deepmatching1&quo ...
- php_imagick超强的PHP图片处理扩展
php_imagick是一个可以供PHP调用ImageMagick功能的PHP扩展,使用这个扩展可以使PHP具备和ImageMagick相同的功能. ImageMagick是一套功能强大.稳定而且 ...
- c语言实践:求两个数的最大公约数
我的思路是这样的:比如12和16这两个数.先理解一下概念,什么叫最大公约数.就是12有很多个因数,16也有很多个因数,这两堆因数中有一些重合的因数,在这些重合的因数中找到那个最大的.那么最大公约数一定 ...
- R list frame, matrix
list是个筐,什么都可以往里装,包括它自身.数据框是个二维数组,同列必须同类型,行随意.
- linux蓝屏时间修改
setterm -blank 2 #/etc/profile里添加这样一句话,可以让屏幕2分钟后没有信号(蓝屏) setterm -blank 0 #/etc/profile里添加这样一句话, ...
- [redis]redis-cluster的使用
1.为集群添加一个主节点 首先准备一个全新的redis文件夹,这里我们叫做为7007 [root@CentOS7 redis-cluster]# ls [root@CentOS7 redis-clus ...
- Asp.net WebPages框架运行原理浅析
[来源] 达内 [编辑] 达内 [时间]2012-09-14 在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和 ...
- QT开发环境
代码实现界面和槽 代码实现界面和槽 在上述工程的dialog.h中添加如下加黑代码: 加入头文件: #include <QLabel> #include <QLineEdit> ...
- 2张图简单分析count(0)与count(*)
以前一直以为count(0)查询效率比count(*)比较高,原因大概是这么认为count(0)只是第一列进行统计,而count(*)所有列放在一起统计(亲,不要误会,这里不是所有列累加哦) 结果真的 ...