网站建设征求意见,网站小视频怎么做的,外贸怎样做网站,dede可以做购物网站吗目录
一、构造函数
二、析构函数
三、赋值运算符
四、拷贝构造 如果一个类中没有成员#xff0c;我们称为空类。空类#xff0c;也存在6个默认的类成员函数。
默认成员函数#xff1a;用户不显示地写#xff0c;编译器会默认生成的函数叫做默认成员函数。 6个默认成员…目录
一、构造函数
二、析构函数
三、赋值运算符
四、拷贝构造 如果一个类中没有成员我们称为空类。空类也存在6个默认的类成员函数。
默认成员函数用户不显示地写编译器会默认生成的函数叫做默认成员函数。 6个默认成员函数 构造函数完成对象初始化 析构函数完成对象清理 拷贝构造用同类对象构造新类 赋值重载把一个对象赋给另一个对象 取地址重载很少涉及 一、构造函数
在C语言中一个数据结构的模拟首先要完成初始化就拿栈举例子
初始化要确定top确定开辟的空间和数组的初始容量。如果没有完成这一初始化会出现诸多问题为了防止遗忘类的初始化引入构造函数。
在类的创建时自动调用用来进行初始化。
1.特性
1名称与类名相同没有返回值。
2不是开空间创建对象是在实例化后自动调用。
3可以重载
拿日期类举例子
.构造函数可以是重载 重载要注意二义性 .关于重载的调用 在调用无参构造函数时 不可写成 Date d1();否则编译器将认为这是一个函数声明。 .在函数重载中给缺省值
关于带参函数给全缺省那么它与无参构造函数都为默认构造函数不需要用户显示调用编译器就能初始化。
默认构造函数只能出现一个全缺省不能与无参构造函数同时出现。 在类中既有无参构造函数和全缺省构造函数编译器能通过编译 但在创建对象时会出现二义性不知道调用哪个函数会出错。 5编译器会生成默认的构造函数
如果用户没有自己显示的实现一个构造函数那么编译器会生成一个无参的默认构造函数。 编译器生成的默认构造函数特点 内置类型初始化为随机值自定义类型会调用其的构造函数。 类B的默认构造函数在初始化时aa时会调用A的构造函数而b初始化为随机值。 6初始化列表 对于引用和const类型的对象在定义时必须进行初始化而构造函数的函数体为赋值语句无法进行初始化
因此引入初始化列表在对象创建时即完成初始化工作。 初始化列表以一个冒号开始接着是一个以逗号分隔的数据成员列表每个成员变量后面跟 一个放在括号中的初始值或表达式 注意 每个成员在初始化列表只能出现一次 引用和常对象需要传参的自定义类型必须在初始化列表中初始化 初始化列表的初始化顺序只与类对象声明顺序有关 二、析构函数
在一个类对象结束要进行动态内存的释放。为了防止用户遗忘引入析构函数在对象生命周期结束时自动调用完成对象的内存清理工作。 特性 1函数名为 类名前加~ (表示与构造函数相对)
2没有参数 没有返回值
3编译器会生成默认构造函数 与构造函数一样用户没有显示写析构函数时编译器会自动生成析构函数
内置类型不做回收自定义类型调用其的析构函数。
4调用顺序类似栈结构先创建的类后调用析构函数。 三、赋值运算符
C为了增强代码的可读性引入赋值运算符
赋值运算是针对俩个已经存在的类
关键字operator 有函数参数和返回值 特性
1在用户不显示写时编译器会生成默认赋值运算符其的特点是浅拷贝 浅拷贝将目标一个字节一个字节的拷贝给目的地 涉及一块空间的拷贝不能用浅拷贝同一块空间不能连续释放两次因此用户自定义赋值运算符重载就非常有必要。
2返回值是T,减少传值的拷贝可以连续拷贝 参数类型const T 防止被错误修改
3)隐藏第一个参数this指针 检查拷贝的来源是否为自己
3不可重载为全局函数
全局函数没有this指针需要传所有参数 四、拷贝构造
将已经存在的类拷贝给一个新类
其是构造函数的一个重载 在传参时必须用引用接收参数 否则 不带引用会发生无限递归 要拷贝构造就要传参 传参就要调用拷贝构造 调用拷贝构造就要传参 ..........会发生无限递归 1用户不显示写时编译器会产生默认拷贝构造函数是浅拷贝
在涉及动态空间时必须显示实现一个拷贝构造函数否则会发生同一块空间释放俩次
2对象返回时能返回引用尽量返回引用提高效率 区别拷贝构造和赋值的调用 拷贝构造是一个存在的类对象赋值是俩个类都存在 ———————————————————————————————————————————
本期的C默认成员函数的介绍就到这。还有俩个默认的成员函数但是基本上用不到 就不做介绍对于构造函数是重要的一项希望本文对大家有所帮助