C++类与对象

1.类的概念
类是一种特殊的数据类型。一般来说,一个对象包含两个部分:成员数据和成员函数,数据用来描述该对象的相关属性,成员函数用来描述该对象的相关功能。
2. 类的定义
定义类的语法形式为

关键字public,protected,private表示类中定义的成员数据和成员函数分别具有公有访问属性,保护访问属性和私有访问属性。具体含义参见5. 类的访问属性
在命名空间类,可以先声明后实现
3. 对象的定义

在类内声明莫缺省函数时,类内的缺省不可省略,类外定义时一定要省略,不然会报错。而且在分文件实现类声明和成员函数定义时,类内缺省不能省略,定义时一定要省略。


对象赋值方式1:
对象赋值方式2:


对象赋值方式3为构造函数赋值,后续再详细讲述。
如何创建一个类中函数指针以及怎么使用呢?
4.类的成员函数 
4.1 内联成员函数

内联成员函数有两种定义方式:隐式内联成员函数和显式内联成员函数
隐式内联成员函数:

上述代码中,函数print()是一个隐式内联成员函数。隐式内联成员函数实际是在类的定义中,不使用函数声明的形式,而使用函数定义的形式。
显式内联成员函数:

4.2重载成员函数
对于重载成员函数,需要注意:
1.成员函数的重载除了满足一般函数重载的三个条件之一;或函数参数的数目不同,或函数参数的顺序不同,或函数参数的类型不同,还要满足所有重载函数均属于同一个类的条件
2.成员函数和一般函数不能实现函数重载
3.来自于不同类的成员函数不能实现函数重载


5.类的访问属性

其中保护属性protected由于涉及类的继承的有关内容,暂不讨论,后面会为大家讲述的。
6.对象的使用



7.构造函数
构造函数函数名与类名相等,他是对象初始化的一种方式。构造函数没有返回值,构造对象的过程就是调用构造函数的过程,不定义构造函数会默认(系统自定义)生成无参构造函数。自己定义构造函数的话,系统不会默认生成无参构造函数,也就意味着不能创建无参对象。构造函数也可以发生重载。
8.析构函数
当对象生存周期结束时,需要调用析构函数,释放对象所占内存空间。
关于析构函数:
1.由于析构函数是无参的,而析构函数的名字又是唯一的,因此析构函数是不能进行重载的
2.析构函数的调用是在对象删除的时刻进行的
3.如果没有具体定义析构函数,编译系统同样会自动生成一个析构函数,称为默认析构函数
4.默认析构函数只能用来释放对象的成员数据所占用的空间,但不包括堆空间的资源,因此,当函数中使用new运算符申请从堆中分配空间时,为了防止内存泄漏,需要具体定义析构函数,而不能使用默认析构函数

9.拷贝构造函数
C++中拷贝构造函数调用时机通常有三种情况:
1.使用一个已经创建完毕的对象来初始化一个新对象
2.值传递的方式给函数参数传值
3.以值方式返回局部变量

(照片来自人民邮电出版的C++程序设计,姚琳主编)
构造函数调用规则:
默认情况下,C++编译器至少给一个类添加3个函数
1.默认构造函数(无参,函数体为空)
2.默认析构函数(无参,函数体为空)
3.默认拷贝构造函数,对属性进行值拷贝
构造函数调用规则如下:
1.如果用户定义有参构造函数,C++不再提供默认无参构造函数,但是会提供默认拷贝构造函数
2.如果用户定义拷贝构造函数,C++不会再提供其他构造函数
10.深拷贝与浅拷贝
浅拷贝:简单的赋值拷贝操作
深拷贝:在堆区重新申请空间,进行拷贝操作
如果类的数据成员包含指针变量,类的构造函数必须使用new运算符为这个指针动态申请堆空间
11.初始化列表


12.类对象做为类成员


构造的顺序是:先调用对象成员的构造,再调用本类构造,析构顺序与构造相反
13.静态成员
静态成员就是在成员变量和成员函数前加上关键字static,称为静态成员
静态成员分为:
1. 静态成员变量:所有对象共享同一份数据 ;在编译阶段分配内存;类内声明,类外初始化。
2.静态成员函数:所有对象共享同一个函数;静态成员函数只能访问静态成员变量。

14.C++对象模型和this指针
在C++中,类内的成员函数变量和成员函数分开存储,只有非静态成员变量才属于类的对象上。
类内地成员函数其实都是只有一份,为所有对象共享。

每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码,那么问题是:这一块代码是如何区分哪个对象调用自己的呢?C++通过提供特殊的对象指针,this指针,解决上述问题。this指针指向被调用的成员函数所属的对象。this指针是隐含每一个非静态成员函数内的一种指针,this指针不需要定义,直接使用即可。
this指针的用途:
1.当形参和成员变量同名时,可用this指针区分
2.在类的非静态成员函数中返回对象本身,可使用return *this;

15.空指针调用成员函数
16.const修饰成员函数
常函数:
1.成员函数后加const后我们称为这个函数为常函数
2.常函数内不可以修改成员属性
3.成员属性声明时加关键字mutable后,在常函数中依然可以修改
常对象:
1.声明对象前加const称该对象为常对象
2.常对象只能调用常函数



这里补充一下常成员数据,常成员数据就是前面加const的数据,但是为对象赋值时,只能有一种赋值方式:

17.友元
友元的三种实现:
1.全局函数做友元
2.类做友元
3.成员函数做友元
1.

2.

3.

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值