目录
前言
一:类的六个成员默认函数
二:构造函数
1.概念
2.特征
3.全缺省调用构造函数
4. 类中无构造函数
三:析构函数
1.概念
2.特征
3.类中无析构函数
四:拷贝构造函数
1.概念
2.特征
3.类中无拷贝构造函数
4.拷贝构造的实现场景
5.举例
五:运算符重载
1.概念
2.注意事项
3.举例
六:日期类
七:在深层次理解流插入和流提取
1.理解
2.实现
八:const成员
1:举例
2.const的使用场景
九:取地址以及const取地址操作符重载
接下来的日子会顺顺利利,万事胜意,生活明朗-----------林辞忧
前言
在经过类与对象的初步了解之后,接下来我们就来研究关于类与对象的“六大天选之子”函数
一:类的六个成员默认函数
二:构造函数
1.概念
构造函数是一个特殊的成员函数,名字与类名相同,主要任务为初始化对象,在对象整个生命周期内只调用一次
2.特征
1.函数名与类名相同
2.无返回值
3.对象实例化时编译器自动调用对应的构造函数
4.构造函数可以重载,即一个类可以有多个构造函数
3.全缺省调用构造函数
无参的构造函数和全缺省的构造函数都称为默认构造函数,并且默认构造函数只能有一个(不然会造成歧义)。
注意:无参构造函数,全缺省构造函数,我们没写编译器自己默认生成的构造函数,都可以认为是默认构造函数
一般建议:每个类都提供一个默认构造函数
不传参数就可以调用构造函数
4. 类中无构造函数
1.在c++类型分为内置类型和自定义类型,内置类型就是如int,double,char,各种指针等,自定义类型就是用struct,class,union等定义的
1.对于内置类型成员编译器不做处理,为随机值
2.自定义类型的成员,会去调用它的默认构造(不用传参数的构造)
3.为解决内置类型成员的问题,在内置成员声明时给缺省值
三:析构函数
1.概念
与构造函数正好相反,对象在销毁时自动调用析构函数,完成对象中资源的清理工作,局部对象销毁工作是由编译器完成的
2.特征
1.析构函数名是在类名前加~
2.无参数无返回类型
3.一个类只能有一个析构函数,不能重载
4.对象生命周期结束时,c++编译系统自动调用析构函数
3.类中无析构函数
1.在c++类型分为内置类型和自定义类型,内置类型就是如int,double,char,各种指针等,自定义类型就是用struct,class,union等定义的
1.对于内置类型成员编译器不做处理
2.自定义类型的成员,会去调用它的析构函数
四:拷贝构造函数
1.概念
只有单个形参,该形参是对本类类型对象的引用,一般加const修饰再用已存在的类类型对象创建新对象时由编译器自动调用
2.特征
1.拷贝构造是构造函数的一个重载形式
2.拷贝构造函数的参数只有一个且必须是类类型对象的引用,使用传值方式会直接报错,因为会引发无穷递归
3.类中无拷贝构造函数
1.若未显示定义,编译器会调用默认的拷贝构造函数。默认的拷贝构造函数对象按内存存储按字节需完成拷贝,这种靠被叫做浅拷贝或者值拷贝
2.对于内置类型,编译器可以直接拷贝
3.对于自定义类型,需要调用这个成员拷贝构造
4.拷贝构造的实现场景
自己实现了析构函数释放空间,就需要实现拷贝构造
5.举例
五:运算符重载
1.概念
c++为了增强代码的可读性引入了运算符重载,运算符重载是具有特殊函数名的函数,具有返回值类型,函数名以及参数列表
函数原型为 返回值类型 operator 操作符(参数列表)
2.注意事项
1.不能通过连接其他符号来创建新的操作符,比如operator @
2.重载操作符必须有一个类类型参数
3.用于内置类型的运算符,其含义不可改变
4.作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this
5. .* :: sizeof ?: . 以上五个运算符不能重载
6.运算符重载函数可以定义在全局,也可以在类中
3.举例
六:日期类
七:在深层次理解流插入和流提取
在如日期类这样的类中,用d1.Print(),来打印数据显得麻烦,c++中习惯用cout打印数据,如果能实现cout<<d1;这样的话会显得更加方便,代码的可读性更强
1.理解
cout<<i:实际底层为cout.operator<<(i) // int的实现方式
cout<<d:底层实现为cout.operator(i) //double的实现方式
运用的是运算符重载+函数重载
观看官网的介绍得
对于各种内置类型的实现是定义好的
如cout是在ostream的类中,cin是在istream的类中
2.实现
但对于自定义类型,不能直接访问,需要自己实现
定义在全局,并且要访问成员变量使用友元函数
八:const成员
1:举例
要解决上述问题就得用 void Print() const ,用const去修饰this指针,然后this的类型为const A*
2.const的使用场景
只要成员函数内部不改变成员变量,最好加上const,const对象和普通对象都可以调用
九:取地址以及const取地址操作符重载
这个函数大概了解即可,不写编译出也会自动生成地址