一 类类型作为函数参数
1 类类型作参数类型的三种方式
1) 对象本身作为参数
由于C++采用传值的方式传递参数,因此使用对象本身参数时,形参是实参的一个拷贝。在这种情况下,最好显式地为类定义一个拷贝构造函数,以免出现不容易发现的错误。
距离:对象本身做函数参数
对象引用作为参数
这是一种推荐方式。它比对象本身参数或对象指针参数都要容易理解和使用,同时没有任何的副作用。
对象指针作为参数
对象指针指向实参对象,通过间接方式访问和修改它所指向的对象,实际上就是访问和修改实参对象。
二 对象数组
1 对象数组
与任何其他数据类型一样,可以创建一个类的对象数组。
例如:Clock clocks[10];
通过下标访问数组中的对象,进而访问该对象的公有成员。
例如:clocks[3].ShowTime();
2 数组初始化
1) 显式初始化数组元素
const unsigned arr_size=3;
int ia[array_size]={0,1,2}
2) 隐式初始化
若无显式初始化,则:
在函数体外定义的内置数组,元素均为0
函数体内定义的内置数组,元素无初始化
若元素为类类型,无论在哪里定义,则自动调用该类的默认构造函数进行初始化。如果该类没有默认构造函数,则必须为该数组的元素提供显式初始化。
3 对象数组的初始化
对象数组的初始化过程,实际上就是调用构造函数对每一个数组元素进行初始化的过程。
如果在声明数组时给出每一个数组元素的初始值,在初始化过程中就会调用最匹配的构造函数。
初始化array[0]时调用的是Point(float,float)构造函数
初始化array[1]时调用的是Point(float)构造函数
初始化array[2]时调用的是Point()构造函数
4 对象指针的加减操作
三 静态成员
1 静态成员
当用关键字static说明一个类成员时,该成员称为静态成员。
静态成员分为:
静态数据成员;
镜头成员函数;
2 静态数据成员的定义和初始化
1) 定义静态数据成员
2) 初始化静态数据成员
int ABCD::s_value=6;//在类外定义静态数据成员,在定义时给初值
例子:静态数据成员的特性
3)静态数据成员的使用
静态数据成员也有public和private之分,因此在类外只能访问public属性的静态数据成员,在类内可以访问所有属性的静态数据成员。
由于静态数据成员是属于类的,因此在类外按如下形式访问public静态数据成员:
ABCD:😒_value;
特别地,当类对象不存在时,也可以访问类的静态数据成员。
例:静态数据成员的基本用法
4) 静态成员函数
静态成员函数的定义
静态成员函数只属于一个类,它没有this指针。
静态成员函数也可以声明为public或private属性。
四 常对象与常成员(const)
1 常对象与常成员(const)
如果某个对象不允许被修改,则该对象称为常对象。C++用关键字const来定义对象。
const也可以用来限定类的数据成员和成员函数,分别称为类的常数据成员和常成员函数。
常对象和常成员明确规定程序中各种对象的变与不变的界限,从而进一步增加了C++程序的安全性和可控性。
1)常对象
常对象不能变,只能调用常成员函数。
啥时用常对象?
(1)函数返回值;(2)函数形参(常引用);
2) 常数据成员
变量的值不能变。
类型 const 数据成员名;或者 const类型数据成员名;
3) 常成员函数
该函数不能修改对象数据成员的值。
返回类型 成员函数名(参数表)const;
(1) 常成员函数不能更新对象的数据成员,也不能调用该类中没有用const修改的成员函数。
(2) 常对象只能调用它的常成员函数,而不能调用其他成员函数。
(3)const关键字可以用于参与重载函数的区分;
五 友元
1 友元关系
封装的目的就是为了实现信息隐蔽
一个对象的私有成员只能被自己的成员访问到。当类外的对象或函数要访问这个类的私有成员时,只能通过该类提供的公有成员间接地进行。
C++提供了友元机制来打破私有化的界限,即一个类的友元可以访问到该类的私有成员。
2 友元函数
问题的提出
Point类代表"点”,考虑如下需求:
需要一个函数来计算任意两点间的距离,那么这个函数该如何设计呢?
3 友元类
除了将一个普通函数声明为一个类的友元函数外,也可以将一个类Y声明为另一个类X的友元类。
友元类的特点:类Y中的所有成员函数都成员函数都成为类X的友元函数,都能直接访问类X中所有的成员。
将成员函数说明为另一个类的友元函数
对友元关系的总结
友元具有如下的性质:
类的友元可以直接访问它的所有成员。
友元的声明必须放在类的内部,但放在哪个段没有区别。
友元关系不具备传递性,即X是Y的友元,但Y不一定是X的友元。
友元关系不具备传递性,即X是Y的友元,Y是Z的友元,但X不一定是Z的友元。
六 类的组合
1 类的组合
一个类的对象作为另一个类的成员,这体现的是整体和部分的关系,即对象的包含关系,这个作为成员的对象被称为子对象。
举例:
Circle类的实现