ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++this指针,构造函数,析构函数,拷贝构造函数

2021-02-07 22:32:54  阅读:143  来源: 互联网

标签:函数 构造 编译器 C++ 析构 拷贝 构造函数


1.结构体内存对齐规则:
将默认的对齐数和当前数据类型所占字节进行对比,找最小的作为有效对齐数。
VS默认对齐数为8个字节
面试题:
(1).为什么要进行内存对齐?
主要原因是提高效率,次要原因是有些硬件如果不进行内存对齐就会出错。
(2)如何知道结构体某个成员相对于起始位置的偏移量?
方法1:取地址相减,但要转换为char*,
示例:(char*)&Student._name-(char*)&Student
(3)怎样判断存储方式是大端还是小端?
大端:低地址存高位,高地址存高位;
小端:低地址存低位,高地址存高位;
①通过整形数据1判断
在这里插入图片描述

② 通过联合体
在这里插入图片描述

2.类中的this指针
(1)每一个非静态成员中,都有一个this指针,作为函数的第一个形参,
this指向当前调用此函数的对象;
(2)this类型:类类型* const this;
我们不需要写this指针作为函数参数;
示例:Date* const this
(3)this指针的存储位置:栈,编译器进行优化存放在寄存器中;
(4)this指针当进行解引用时,不能为空;
3.类的6个默认成员函数
(1)构造函数:初始化
(2)析构函数:清理
(3)拷贝构造:使用同类对象初始化创建对象
(4)赋值重载:把一个对象赋值给另一个对象
(5)对普通对象取地址重载
(6)对const对象取地址重载
4.构造函数
(1)构造函数负责初始化对象类,它的函数名和类名相同;
(2)编译器在创建对象时,会自动调用无参构造函数,完成对象内容的初始化;
(3)可以自定义带参的构造函数
函数名(参数列表)
{
函数体
}
示例

Date(int year, int month, int day)
{
		_year = year;
		_month = month;
		_day = day;
}

(5)构造函数可以定义多个,支持函数重载;
(6)默认构造有两种,无参构造和全缺省构造,但一个类只能有一个默认构造,一般使用全缺省构造;
没有显示定义无参构造,编译器会自动生成无参构造;
全缺省构造和无参构造只能有一个;
反面示例:
在这里插入图片描述

(7)当前类的构造函数会首先自动调用自定义成员的默认构造,完成自定义成员的初始化,然后调用自身基本类型(内置类型)的默认构造。如果自定义类型没有默认构造,编译器就会报错。
课堂归纳:
在这里插入图片描述

5.析构函数
(1)对象销毁的时候,编译器自动调用析构函数,完成资源的清理;
(2)不显示定义析构函数,编译器会自动生成默认的析构函数;
(3)析构函数自动调用自定义成员的析构函数,完成自定义成员的资源清理;
6.拷贝构造函数
(1)拷贝构造函数就是将一个对象拷贝到另一个对象中去;
(2)拷贝构造函数的参数为一个const类型的类型引用
示例:Date(const Date& d)
{}
(3)如果不显示定义拷贝构造,编译器会自动生成拷贝构造函数;
(4)有资源就要显示定义拷贝构造;
编译器自动生成的拷贝构造只能清理普通的成员,但不能释放资源;

标签:函数,构造,编译器,C++,析构,拷贝,构造函数
来源: https://blog.csdn.net/m0_51765966/article/details/113748561

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有