C_PlusPlus学习笔记 - 3_类与对象 (C++语言程序设计【第三版】 郑莉等,清华大学出版社)

3——类与对象

在我们熟悉的现实世界中,一切事物都是 对象 。对象可以是有形的,也可以是无形的。 对象可以是一个个体,也可以是由诸多其他对象组成。 C++支持这种抽象,将抽象后的数据和函数封装在一起,便构成C++的“类”。

面向对象设计的基本特点
抽象: 对具体问题进行概括,抽象出一类对象的公共性质并加以描述的过程。包括数据抽象和行为抽象。
封装: 将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的函数代码进行有机的结合,形成类,其中数据和函数都是类的成员。
通过封装一部分成员充当类与外部的接口,而将其他成员隐蔽起来,这样就达到了对成员访问权限的合理控制,使不同类之间的相互影响减少到最低限度,进而增强数据的安全性和简化程序的编写工作。
继承: C++语言中提供了类的继承机制,允许程序员在保持原有类特性的基础上,进行更具体、详尽的说明。
多态: 多态性是指一段程序能够处理多种类型对象的能力。C++语言中,这种多态性可以通过强制多态,重载多态,类型参数化多态,和包含多态。
强制多态和重载多态为特殊化多态,只是表面的多态性。
包含多态和类型参数化多态属于一般多态性。C++通过虚函数来实现包含多态。

类与对象
类是面向对象程序设计方法的核心 ,利用类可以实现对数据的封装和隐蔽。
在面向过程的结构化程序设计中,程序的模块由函数构成,函数将逻辑上相关的语句和数据封装,用于完成特定的功能,而在面向对象程序设计中,程序模块由类构成,类是对逻辑上相关的函数和数据的封装,他是对问题的抽象描述。因此后者的继承程度更高,更适合大型复杂程序的开发。
int i; bool b;
另一个重要的意义通常被我们忽略,限定对变量的操作。
i可以进行算术操作,b可以进行逻辑操作。
说明每一种数据类型都包含了数据本身的属性以及对数据的操作。
哪一种语言,其基本类型都是有限的,类实际上就是自己定义的数据类型。
因此,int表示整数, 也可以自定义无限多中新类型,汽车,手表,人等等。

类的声明:
类成员包括数据成员和函数成员,分别描述问题的属性和行为。

类的成员函数:
成员函数的声明和实现
函数的原型声明要写在类体中,而函数的具体实现写在类体外。
带默认参数的成员函数。
内联成员函数,(隐式声明,显式声明)

构造函数和析构函数
类和对象的关系,就相当于基本类型和它的变量之间的关系,一般与特殊的关系。
每个对象区别于其他对象的地方主要有两个,外在的区别是对象的名称,而内在的区别则为对象自身的属性值,即数据成员的值。就像声明基本变量时可以初始化一样,在声明对象的时候,也可以同时对他的数据成员赋初值。在声明对象的时候进行数据成员的设置,成为对象的初始化。在特定对象使用结束时,还经常需要进行清理 工作。C++程序中初始化和清理工作,由两个特殊的成员函数完成,构造函数和析构函数。
构造函数的作用就是在对象被创建时利用特定的值构造对象,将对象初始化为一个特定的状态。构造函数的函数名与类名相同,而且没有返回值,构造函数通常被声明为公有函数,只要类中有了构造函数,编译器就会在建立新对象的地方自动插入对构造函数的调用代码,因此我们通常说在对象被创建时构造函数将会自动调用。
如果类中没有写构造函数,编译器会自动生成一个默认形式的构造函数——没有参数,也不做任何事情。
构造函数可以重载。。。

拷贝构造函数
如复印机复印东西。。。对象的复制也是C++程序必不可少的。
生成对象副本有两种途径:
1.建立一个新的对象,然后将一个已有对象的数据成员取出来,一一赋给新的对象。
2.使类具有自行copy的功能。这就是拷贝构造函数的功能。
拷贝构造函数是一种特殊的构造函数,具有一般构造函数的所有特性,其形参为本类对象的引用,其作用为使用一个已经存在的对象,去初始化一个同类的新对象。实现同类对象之间的数据成员的传递。
如果没有定义拷贝构造函数,系统会自动生成一个默认的拷贝构造函数。是把每个数据成员的值复制到新建立的对象中。
普通构造函数是在对象创建时被调用,拷贝构造函数则在:
1. 用类的一个对象去初始化该类的另一个对象时
2. 如果函数的形参为类的对象,调用函数时,进行形参和实参结合时。
3. 如果函数的返回值是类的对象,函数执行完成返回调用者时。

析构函数
处理扫尾工作。
对象会消失吗?当然会!自然界万物都是有生有灭,对象也是一样。
析构函数与构造函数正好相反,析构函数是在对象的生存期即将结束时自动调用。

类的组合
类的成员数据既可以是基本类型,也可以是自定义的类型。当然也可以是类的对象。
类的组合描述的就是一个类内嵌其他类的对象作为成员的情况,它们之间的关系为包含和被包含的关系。
例如计算机 (软件和硬件; 软件:系统软件,应用软件)可以看成类的组合。
当创建类的对象时,如果这个类具有内嵌对象成员,那么各个内嵌对象将首先被自动创建。因此,在创建对象时既要对本类的基本数据成员进行初始化,又要对内嵌对象成员进行初始化。这时理解这些对象的构造函数的调用顺序就很重要。
组合类构造函数定义一般形式:
类名::类名(形参表):内嵌对象1(形参表) :内嵌对象2(形参表) 称为初始化列表,其作用为对内嵌对象进行初始化。
对基本数据成员也可以这样初始化 Circle::Circle(float r) : radius(r){}

在创建一个组合类的对象时,不仅自身的构造函数将被调用,而且调用内嵌对象的构造函数。调用顺序:
1. 调用内嵌对象的构造函数,调用顺序按照内嵌对象在组合类的声明中出现的顺序。
2. 执行本类构造函数的结构体。
如果要为组合类编写拷贝构造函数,则需要为内嵌成员对象的拷贝构造函数传递参数。
C::C( C &c1):b(c1.b)

前向引用声明
在引用未声明的类之前,将该类的名字告诉编译器。
在完整声明之前,不能声明该类的对象,但可以声明该类对象的指针。

UML图形标识。。。



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录 第1章 概述 1.1计算机程序设计语言的发展 1.2 面向对象的方法 1.3 面向对象的软件开发 1.4 信息的表示与存储 1.5 程序的开发过程 1.6 小结 习题 第2章 C++简单程序设计 2.1 C++语言概述 2.2 基本数据型和表达式 2.3 数据的输入与输出 2.4 算法的基本控制结构 2.5 自定义数据型 2.6 小结 习题 第3章 函数 3.1 函数的定义与使用 3.2 内联函数 3.3 带默认形参值的函数 3.4 函数重载 3.5 函数模板 3.6 使用C++系统函数 3.7 小结 习题 第4章 类与对象 4.1 面向对象的思想 4.2 面向对象程序设计的基本特点 4.3 和对象 4.4 构造函数和析构函数 4.5 的组合 4.6 模板 4.7 面向对象标记 4.8 小结 习题 第5章 C++程序的结构 5.1 作用域与可见性 5.2 生存期 5.3 数据与函数 5.4 静态成员 5.5 友元 5.6 共享数据的保护 5.7 多文件结构和编译预处理命令 5.8 小结 习题 第6章 数组、指针与字符串 6.1 数组 6.2 指针 6.3 动态内存分配 6.4 字符串 6.5 小结 习题 第7章 继承与派生 7.1 继承与派生 7.2 访问控制 7.3 派生的构造和析构函数 7.4 派生成员的标识与访问 7.5 赋值兼容规则 7.6程序实例——用高斯消去法解线性方程组 7.7 程序实例——一个小型公司的人员信息管理系统 7.8 小结 习题 第8章 多态性 8.1 多态性概述 8.2 运算符重载 8.3 虚函数 8.4 抽象 8.5 程序实例——用变步长梯形积分算法求解函数的定积分 8.6 程序实例——对一个小型公司的人员信息管理系统程序的改进 8.7 小结 习题 第9章 群体 9.1 线性群体 9.2 C++标准库中的容器 9.3 小结 习题 第10章 群体数据的组织 10.1 插入排序 10.2 选择排序 10.3 交换排序 10.4 顺序查找 10.5 折半查找 10.6 标准C++库中的算法 10.7 小结 习题 第11章 流库与输入/输出 11.1 I/O流的概念 11.2 输出流 11.3 输入流 11.4 输入/输出流 11.5 小结 习题 第12章异常处理 12.1 异常处理的基本思想 12.2 C++异常处理的实现 12.3 异常处理中的构造与析构 12.4 小结 习题 第13章 MFC库与Windows程序开发概述 13.1 Windows的编程模式 13.2 MFC库简介 13.3 使用VisualC++开发Windows程序的步骤 13.4 小结 习题 参考文献

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值