大家好
欢迎回来继续学习
C++语言程序设计
这一节我们来学习
类和对象的定义
我们知道对象是
现实世界中的对象的模拟
那么我们对同类型的对象
进行概括 进行抽象
就形成了类
对象是类的实例
那么我们要使用类的功能呢
就要定义对象
通过对象去使用
在类里面定义好的功能
现在我们首先来看
设计一个类意味着什么
实际上我们设计一个类
就意味着设计一个类型
设计一个新的类
也就是定义为一个新的类型
那么定义这个新类型时候
我们要关注哪些问题呢
首先我们要关心
这个类型的合法值是什么
这个类型应该有什么样的函数
有什么样的操作符
我们知道基本数据类型
当你定义这个类型的变量的时候
不仅意味着
你定义了这个变量的存储形态
同时也意味着
你定义了这个变量
它应该遵循什么样的运算规则
能够进行哪些运算
那么我们定义一个新的类
既然是定义新类型
所以也应该关心这个类
应该有什么样的函数和操作符
还有我们还要定义
新类型的对象
它如何被创建
如何被销毁
还有对象怎么进行初始化
和赋值
我们知道定义一个基本类型
变量的时候
我们都可以在定义变量的时候
对变量进行初始化
那么定义对象的时候
同样我们也需要
能够对对象进行初始化
这一章我们要介绍
对象的初始化
那么如何给对象赋值呢
默认的有一个赋值功能
在第八章我们还要讲
重载赋值运算符
也就是自定义这个赋值功能
还有对象
也应该可以作为函数的参数
进行传递的
那么我们如何把对象
作为函数的参数进行传递
也是我们在定义类的时候
应该关注的问题
最后呢
我们要清楚谁将使用
这个类型的对象
还有它的对象的成员
好 下面呢我们来看一下
语法上怎么样去定义一个类
那么大家看这个就是
定义类的语法形式
要用关键字class开头
后面就是类名称
就是我们程序员
要为这个类自己起一个标志符
然后我们就看到
在这一对大括号里面
有类的成员
这个类的成员呢
它又分成公有成员 私有成员
和保护成员
不管是数据成员
还是函数成员
都可以分成这样三类
我们知道类里面的属性
是用数据成员表示的
类里面的功能是用函数成员
表示的
那么数据成员 函数成员
都分成公有的public
私有的private
和保护型protected
那么这里面的公有成员
是类的外部接口
我们在定义类的时候
还可以给类的数据成员
指定类内的初始值
这个类内的初始值呢
是在构造对象的时候
用于初始化对象用的
现在我们来看一个类内
初始化的例子
现在我们再来看这个
Clock类里面的定义
这一次给三个数据成员
都设置了初始值
这种在类体里面设置的初始值
叫做类内的初始值
当我们构造
这个Clock为对象的时候
如果有构造函数
对它进行初始化呢
就会按照构造函数
指定的值进行初始化
如果构造函数没有对
这几个数据成员进行初始化
那么就会用这个类内的初始值
构造函数呢
一会稍后我们就会给大家
仔细介绍的
好 我们刚才看到
这个类的定义的语法形式了
我们知道类的成员
它分成公有成员 私有成员
和保护成员
三种访问控制属性
那么公有成员呢
就是在关键字public后面
声明的成员
公有成员是一个类
与外部的接口
任何外部函数都可以访问
类的共有数据
和共有函数
而私有成员是在关键字
private后面声明的
私有成员可以说
它是对外屏蔽了
在外面那是看不见
一个类的私有成员的
所以私有成员
只允许本类中的函数来访问
类外部的任何函数
都不能访问一个类的私有成员
那当然了
很多事情都是有例外的
我们在后面的章节呢
也就是下一章
也会给大家讲
我们可以用某种办法
授权类外的函数访问私有成员
那就是第五章要讲的友元
那么目前我们主要记住
私有成员在类外是不可访问的
那么如果
我们在定义类的成员的时候
紧跟着类名之后的那个大括号
就声明成员
那么这个时候
如果不写
任何访问控制属性的关键字
默认的话这个成员是私有成员
也就是说
如果你在类体的最开头
定义私有成员的话
那么这个private关键字
它是可以省略的
那么保护成员呢
现在看起来
与私有成员很像
它的差别是在什么地方呢
是在继承和派生的时候
我们才看得出来
保护成员与私有成员
它们有什么不同
所以在第七章
我还会给大家详细介绍
保护型的成员
目前呢
大家只要会用公有成员
和私有成员就可以了
当我们定义好一个类以后
怎么样去使用类里面的功能呢
通常我们都要定义一个对象
然后通过对象去调用
它的成员函数
这样来使用类的功能
对象是类的一个实例
类呢
它是一种一类对象的一种设计
当然我们要使用的时候呢
我们肯定是通过一个具体对象
一个个实例去使用这些功能的
就像现实世界中
我们也是进行分类的
比如说教师是一类
那并不是教师这个类型
今天站在这儿给你讲课
而是一个教师个体
某一个具体的教师
站在你面前给你讲课
那在程序中也是一样的
我们要使用类里面
预定义好的功能
就要通过类的对象
所以接下来我们来学习
如何定义类的对象
对象定义的语法是这样的
首先前面是类名
然后后面跟个对象名
这个很像我们定义
基本类型的变量
比如说我们定义int类型的变量
也是这样
类型在前面 变量名在后面
现在呢是类名在前面
对象名在后面
一个类中呢
通常有多个函数成员
数据成员
那么类中的成员
它们之间能不能互相访问呢
可以的
类的成员
它们之间要互相访问的话
直接用成员名就可以访问
如果我们要从类外
来访问类的成员
那就要通过对象来访问
具体的访问形式
就是对象名.成员名的方式
那么这样的方式能访问的
只是类的公有成员
私有成员在类外是不能访问的
接下来呢
我们就来看在类中
我们应该如何去定义
它的成员函数
首先我们需要在类中
说明函数的原型
然后我们在类外
给出函数体的实现
那么实现这个函数的时候呢
跟我们定义普通的函数
其实是很像的
唯一一个区别就是
在函数名前面
要使用类名来加以限定
也就是说
这个函数
它不是一个普通的全局函数
要说明它是属于哪个类的
它是类的成员函数
当然我们也可以在类体中
直接给出函数体定义
那么这个就是内联的成员函数
内联的成员函数
它必须充分简单
这跟我们前面讲过的
内联函数是一样的
在类里面声明成员函数的时候呢
同样也允许函数重载
也允许函数的参数带有默认值
下面我们就来看看
关于内联的成员函数
看看内联成员函数的定义
有哪些规则
我们使用内联成员函数
是为了提高运行时的效果
也就是说
对于比较简单的函数
我们通常可以把它声明为
内联的形式
内联函数的函数体中
不应该有复杂的结构
比如说不应该有循环语句
和switch语句
那么在类中声明内联成员函数
实际上有两种方式
一种就是把函数体
直接写在类的类体中
另外一种方式就是在类体中
只声明函数的原型
然后在类外实现函数
只不过实现函数体的时候
要用inline这个关键字