导图社区 C语言第五章类与对象的概念
C语言是一门面向过程的、抽象化的通用程序设计语言,广泛应用于底层开发。C语言能以简易的方式编译、处理低级存储器。C语言是仅产生少量的机器语言以及不需要任何运行环境支持便能运行的高效率程序设计语言。本思维导图为大家整理在C的学习中第五章类与对象的概念,重点定义以及语句用法,喜欢的小伙伴可以点个赞哦!
编辑于2019-07-12 06:51:37第五章 类与对象的概念
5.1 类与对象的概念
5.1.2 类的定义
格式如下:
class 类名
{
public: 公有
protected: 保护
private: 私有
};
其中:
关键字class表明定义的是一个类
类名是类的名称,应该是一个合法的标识符
public、protected、private、为存取控制属性(访问权限),用来控制对类的成员的存取,如果前面没有标明访问权限,则默认为private。
类的成员有数据成员和函数成员两类,类的数据成员和函数成员统称为类的成员,类的数据成员一般用来描述该类对象的静态属性,称为属性;函数成员用来描述类的行为或动态属性,成为方法。函数成员有函数构成,这些作为类成员的函数因此也称为成员函数。
5.1.3 对象的建立与使用
建立对象格式
类名 对象名;
调用成员函数,存取格式
对象名.属性
对象名.成员函数名(实参1,实参2,…,)
5.2 构造函数与析构函数
5.2.1 构造函数
对类对象数据成员初始化工作落到了类对象的成员函数身上,因为他们可以访问类对象的私有和保护数据成员。C++为用户提供了专门用于对象初始化的函数——构造函数。
构造函数(constructor)是与类名相同的建立对象时自动调用的函数。如果在定义类时没有为类定义构造函数,编译系统会生成一个默认形式的隐含的构造函数,这个构造函数的函数体是空的,因此默认构造函数不具备任何功能。
如果用户设置了构造函数,那么系统就不会生成任何默认的构造函数,而是根据对象的参数类型和个数从用户定义的构造函数中选择最合适的构造函数完成对该对象的初始化。
5.2.2 析构函数
构造对象时会通过构造函数动态申请了一些内存单元,在对象消失之前就要释放这些内存单元,C++用析构函数清除。
析构函数(destructor)也译作拆构函数,是在对象消失之前的瞬间自动调用的函数,其形式如下:
~构造函数名( );
5.2.4 浅拷贝与深拷贝
当类的数据成员中有指针类型时,我们必须定义一个特定的拷贝构造函数,该拷贝构造函数不仅可以实现原对象和新对象之间数据成员的复制,而且可以为新对象分配单独的内存资源,这就是深拷贝构造函数。
5.3 对象的使用
5.3.1 对象指针
对象如同一般变量,占用一块连续的内存区域,因此可以使用一个指向对象的指针来访问对象,即对象指针,它指向存放该对象的地方。
例如
类名 * 对象指针名;
使用对象指针的好处:
1、实现地址传递:通过在调用函数时将实参对象的地址传递给形参指针对象,使形参指针对象和实参对象指向同一内存地址,这样对象指针所指向的改变也将同样影响实参对象,从而实现信息的双向传递。
2、使用对象指针效率高:使用对象指针传递的仅仅是对应实参对象的地址,并不需要实现对象之间的副本复制,这样就会减小时空开销,提高运行效率。
对象指针名->数据成员名
或
对象指针名->成员函数名(参数表)
5.3.2 对象引用
对象引用是对某类对象定义一个引用,其实质是通过将被引用对象的地址赋给引用对象,使二者指向同一个内存空间,这样引用的对象就成为了被引用的对象的“别名”。
定义一个对象引用,并同时指向一个对象的格式:
类名 & 对象引用名=被引用对象
对象引用的使用格式
对象引用名.数据成员名
或
对象引用名.成员函数名(参数表)
5.3.3 对象数组
对象数组是以对象为元素的数组。对象数组的定义、赋值、引用与普通数组一样,只是数组元素与普通数组的数组元素不同。定义格式如下:
类名 对象数组名[常量表达式n],…,[产量表达式2][常量表达式1];
对象数组初始化格式:
数组名[n] = {类名(数据成员1初值,数据成员2初值,…), 类名(数据成员1初值,数据成员2初值,…), … 类名(数据成员1初值,数据成员2初值,…),};
以一个m维数组为例,对象数组元素的存取格式如下:
对象数组名[下标表达式1][下标表达式2][下标表达式3]…[下标表达式m].数据成员名
或
对象数组名[下标表达式1][下标表达式2]…[下标表达式m].成员函数名(参数表)
5.3.4 动态对象
建立动态对象采用动态申请内存的语句new,删除动态对象使用delete语句。建立一个动态对象的格式如下:
对象指针 = new类名(初值表);
其中: 对象指针的类型应该与类名一致。 动态对象存储在new语句从堆中申请的空间中。 建立动态对象时要调用构造函数,当初值表省略时调用默认的构造函数。
在堆中建立的动态对象不能自动消失,需要使用delete语句删除对象,格式如下:
delete 对象指针;
动态对象的一个重要的使用方面是用动态对象组成动态对象数组。建立一个一维动态对象数组的格式如下:
对象指针 = new 类名[数组大小];
删除一个动态对象数组的格式如下:
delete[ ] 对象指针;
5.3.5 this指针
csdn收集资料
1.类的成员函数有一个隐藏的指针,指向了调用该函数的对象本身。
2.this指针特性 1.this指针的类型: 类类型* const 2.this指针并不是对象本身的一部分,不影响sizeof的结果 3.this的作用域在类“成员函数”的内部 4.this指针是“类成员函数”的第一个默认隐含参数,编译器自动维护传递类编写者不能显示传递 5.只有在类的非静态成员函数中才可以使用this指针,其他任何函数都不可以
5.3.6 组合对象
在C++程序设计中,类的组合用来描述一类复杂的对象,在类的定义中,它的某些属性往往是另一个类的对象,而不像整型、浮点型之类的简单数据类型,也就是“一个类内嵌其他的对象作为成员”,对于将对象嵌入到类中的这样一种描述复杂类的方法,我们称之为“类的组合”,一个含有其他类对象的类称为组合类,组合类的对象称为组合对象。
5.4 静态成员
静态成员的特点是不管这个类创建了多少个对象,其静态成员在内存中只保留一个副本,这个副本为该类的所有对象所共享。
5.4.1 静态数据成员
声明静态数据成员的格式如下:
static 数据类型 静态数据成员名;
在类外初始化的形式如下:
数据类型 类名::静态数据成员名 = 初始值;
5.4.2 静态成员函数
1、通过类名调用静态成员函数
类名::静态成员函数
2、通过对象调用静态成员函数
对象.静态成员函数
5.5 友元
友元不是类成员,但它可以访问类的任何成员。声明为友元的外界对象既可以是另一个类成员函数,也可以是不属于任何类的一般函数,称为友元函数。友元也可以是整个一个类,称为友元类。
5.5.1 友元函数
友元函数是在类定义中由关键字friend修饰的非成员函数。格式如下:
friend 返回类型 函数名(形参表) { … //函数体 }
5.5.2 友元类
友元除了可以是函数外,还可以是类,如果一个类声明为另一个类的友元,则该类称为另一个类的友元类。
格式:
class B { … friend class A; };
对于另个类相互引用的情况,C++专门规定了前向引用声明。 前向引用声明在引用未定义的类之前对该类进行声明,它只是为程序引入一个代表该类的标识符,类的具体定义可以在程序的其他地方进行。
5.6 常成员与常对象
浮动主题