C++程序设计基础【二】
- 一、类的概念
- 1.类和实例的来源
- 1.属性
- 2.行为
- 2.程序中的类和对象
- 1.数据成员
- 2.成员函数
- 二、类
- 1.类定义
- 1.声明数据成员
- 2.声明成员函数
- 3.访问修饰符
- 4.数据成员的访问修饰符
- 5.成员函数的访问修饰符
- 6.分组访问修饰符
- 2.成员函数定义
- 3.内联函数
- 1.隐式内联函数
- 2.显式内联函数
- 4.应用程序
- 1.对象实例化
- 2.操作对象
- 3.成员选择
- 5.结构
- 三、构造函数和析构函数
- 1.构造函数
- 1.参数构造函数
- 2.默认构造函数
- 3.拷贝构造函数
- 2.析构函数
- 3.创建和销毁对象
- 4.必须的成员函数
- 4.实例成员
- 1.实例数据成员和实例成员函数
- 1.锁定与解锁
- 2.隐藏参数
- 3.显式使用this指针
- 4.宿主对象
- 5.访问器成员函数
- 6.更改器成员函数
- 2.类不变式
- 五、静态成员
- 六、面向对象的程序设计
- 1.独立文件
- 1.接口文件
- 2.实现文件
- 3.应用程序文件
- 2.独立编译
- 1.创建仅包含类定义的接口文件
- 2.创建实现文件
- 3.创建应用程序文件
- 4.链接两个目标文件以创建一个可执行文件
- 5.运行
- 3.防止多重包含
- 4.分装
- 1.类的设计
- 2.类的使用
- 3.封装的效果
- 4.公共接口
一、类的概念
1.类和实例的来源
类型是一种抽象,类型的实例是具体的实体
1.属性
属性是我们感兴趣的实例的特征
2.行为
行为是我们假定一个实例可以对其自身执行的操作
2.程序中的类和对象
类对应类型,对象对应实例
1.数据成员
对象的数据成员是变量,其值表示属性
在面向对象程序设计中,使用数据成员模拟对象的属性
2.成员函数
在面向对象程序设计中,使用成员函数是模拟对象的行为
二、类
面向对象模式中C++程序由类定义、成员函数定义和应用程序组成
1.类定义
类定义由类头部、类体和分号三部分组成
类头部由保留字class和设计者指定的名称组成。
类名以大写字母开头,以将它们与以小写字母开头的库中的类区分开
类体是一个语句块,包含数据成员和成员函数的声明
最后是右括号后的分号
1.声明数据成员
声明内置了剋行或者其他先前定义的类类型的变量或者常量
类中的数据成员不能相互依赖
2.声明成员函数
声明用于模拟类行为的所有函数
用const修饰的函数不能更改任何内容
3.访问修饰符
用于确定类的可访问性,分为private、protected和public
默认私有
成员私有时,只能通过成员函数访问;成员保护时,可通过子类访问
4.数据成员的访问修饰符
类的数据成员通常设置为private
5.成员函数的访问修饰符
类的实例成员函数通常设置为public
但如果是用于辅助其他成员函数的,但不允许类以外的函数调用则必须设置为private
6.分组访问修饰符
整个类定义中只使用了一个private关键字和一个public关键字,其后用冒号进行了分组
2.成员函数定义
类作用域符号::
不改变对象的值时,在小括号后花括号前加入const
3.内联函数
当函数调用的执行时间大于函数内执行代码的时间时,为了提高程序性能,可以将函数声明为内联函数,以指示编译器用函数中的实际代码替换函数调用
1.隐式内联函数
将函数声明替换为其定义时,函数被定义为隐式内联函数(不建议)
2.显式内联函数
在函数定义前填入关键字inline,函数被定义为显式内联函数
4.应用程序
1.对象实例化
2.操作对象
3.成员选择
对象与成员函数之间的点被称为成员选择运算符
5.结构
在结构中,默认情况下所有成员都是公共的,而在类中,默认情况下所有成员都是私有的
三、构造函数和析构函数
一个空类中是有6个成员函数的:构造函数和析构函数(初始化和清理)、拷贝复制和赋值重载(拷贝和复制)、普通对象取地址和const对象取地址(取地址重载)
1.构造函数
构造函数是用于创建和初始化对象的特殊成员函数,通常是公用的
在一个类中,可以包含参数、默认和拷贝三种类型的构造函数
1.参数构造函数
类的参数构造函数可以被重载
2.默认构造函数
类的默认构造函数不能被重载
3.拷贝构造函数
类的拷贝函数不能被重载
2.析构函数
析构函数前的波浪号也是名称中一部分
析构函数是没有参数的特殊成员函数,用于清理和回收对象
3.创建和销毁对象
4.必须的成员函数
参数/默认构造函数必须有一个;拷贝构造函数和析构函数必要有,系统为我们提供的是合成***
4.实例成员
1.实例数据成员和实例成员函数
类的实例数据成员通常是私有的,只有通过实例成员函数访问
类的实例成员函数必须是公共的,以便可以从类外部访问它
成员选择运算符.和->(间接运算符和成员选择符的组合*xxx.)
1.锁定与解锁
成员函数由this指针指向的对象使用
2.隐藏参数
3.显式使用this指针
4.宿主对象
宿主对象是实例成员函数在给定时刻所操作的对象(this指针指向的对象)
5.访问器成员函数
访问器实例函数不能更改宿主对象的状态,它需要const修饰符
6.更改器成员函数
更改器实例函数更改宿主对象的状态,它不能有const修饰符
2.类不变式
不变式是一个或者多个必须施加在某些或者所有类数据成员上的条件
五、静态成员
静态成员可用于一个类的多个对象之间的数据共享
静态数据成员属于所有实例的数据成员,必须用关键字static限定
静态成员函数没有宿主对象,不能用const限定符
静态成员函数不能用于访问实例数据成员,因为它没有this指针参数
应实例成员函数访问实例数据成员,静态成员函数访问静态数据成员
六、面向对象的程序设计
1.独立文件
1.接口文件
接口文件时包含类定义的文件
类定义用接口文件*.h
2.实现文件
实现文件包含成员函数的定义
成员函数定义用实现文件*.cpp
3.应用程序文件
应用程序文件包括用于实例化对象并让每个对象执行各自操作的main函数
应用程序用应用程序文件app.cpp
2.独立编译
编译以上三个文件以创造一个可执行文件的过程被成为独立编译
编译过程步骤为5步
1.创建仅包含类定义的接口文件
2.创建实现文件
编译成功会产生一个.o的目标文件
3.创建应用程序文件
编译成功会产生一个.o的目标文件
4.链接两个目标文件以创建一个可执行文件
5.运行
3.防止多重包含
#ifndef、#define、#endif
防止重复定义,若ifndef已定义,预处理器将直接跳到endif
4.分装
1.类的设计
类的设计是开发者开发
2.类的使用
类的使用是用户使用
3.封装的效果
封装可以保护接口文件和实现文件不被更改
4.公共接口
公共接口是基于函数声明的文本文件,用于告知用户如何使用成员函数
API文档格式如下
xxx函数 |
---|
A::B() xxx函数,用于返回xxx |