C++程序设计第九章对象和类小结
面向对象程序设计(OOP)可以高效地开发大规模软件
1. 声明类
类定义了一个对象的属性和方法
- 属性:状态,用数据域来表示
- 行为:一组函数定义
一个对象表示了现实世界中的一个实体;一个对象就是一个类的一个实例
构造函数:特殊种类的函数,可以用来初始化动作和对象的数据域
//类模板标注化UML类图:
//数据域
dataFieldName: dataFieldType
//构造函数
className(parameterName: parameterType)
//函数表示
functionName(parameterName: parameterType):returnType
2. 定义类和创建对象
类给对象做了定义,可以通过类来创建对象
class className
{
public://没有public,会缺省为private
//数据域,
dataFieldName: dataFieldType
//构造函数
className(parameterName: parameterType)
//函数表示
functionName(parameterName: parameterType):returnType
};//注意分号
className objectName;//无参创建对象
ClassName objectName(arguments);//有参数创建对象
3. 构造函数
通过调用构造函数来创建对象
与其他函数相比,3个不同点
- 构造函数的名字必须与类名一致
- 构造函数没有返回值类型——void也不行
- 创建对象时,构造函数被调用时,他的作用就是初始化对象
一般的类里都会有一个无参数的构造函数:无参构造函数;一个类声明里不包括构造函数,他会默认存在一个无参空构造函数成为:缺省构造函数
在构造函数中,可以使用初始化列表初始化数据域
ClassName(parameterList)
:datafield(value1),datafield(value2)
{
}
4. 创建和使用对象
对象的数据域和函数可用对象名可通过运算符(.)来实现
objectName.datafield //调用对象上的数据域
objectName.function(arguments) //调用对象上的一个函数
关于类和对象的,需要注意的
- 从某种意义上,一个类就是一个数据类型
- 可以用=来进行对象之间的复制(仅在相同类之间,复制数据)
- 对象名有点像数组名,一旦声明,不可改变
- 一个对象其实并不是很大
5. 类定义和类实现的分离
这种分离有利于类的维护
两者可以置于两个分离的文件中,类定义文件的扩展名为.h,类实现文件的扩展名为.cpp,名字相同
例如:
//类定义Circle.h
class
{
public:
double radius;
Circle();
Circle(double);
double getArea();
};
//类实现Circle.cpp
#include "Circle.h"
Circle::Circle()
{
radius = 1;
}
Circle::Circle(double newRadius)
{
radius = newRadius
}
double Circle::getArea()
{
return radius * radius * 3.14159;
}
符号::称为二元作用域解析运算符
6. 避免多次包含
“包含保护”可以避免头文件被多次包含
为了避免多次包含的错误,通常采用下面的模板
#ifndef ClassName_H
#define ClassName_H
//类定义文件
#endif
7. 类中的内联函数
可以把短函数定义为内联函数来提升性能
> https://blog.youkuaiyun.com/qq_34793133/article/details/82429379
8. 数据域封装
- 数据域私有可以保护数据,并且使类易于维护
- 将数据域声明为私有的,用private关键字
- 但是为了更改和获取所以添加了两个共有的函数 set和get
- 这种方法使得修改和获取变成了唯一方法,更利于维护
9. 变量的作用域
实例变量(实例化的数据域)和静态变量在类的什么地方声明,他们的作用域都是整个类
一个数据域只能声明一个成员变量,但是一个变量名在不同的函数里可以创建多个局部变量
10. 类抽象和封装
类抽象就是将类的实现和使用分离开来,类实现的细节被封装起来,对用户是隐藏的,这就是类封装
个人感觉类似于类定义和实现的分离,分离==抽象,隐藏==封装