day 9
函数声明
函数参数是引用,那我们传int 类型的变量就行了
C、D选项,a不是指针无法解引用
B选项,不需要传地址
new和delete
此题是new T[] ,会调用N次构造函数
但使用的是delete直接删除所指向的空间
这种操作不正确,应该匹配使用
动态内存分配
malloc申请的空间一定是在堆上,但new不一定,要根据使用者,但默认调用malloc申请的空间还是在堆上
静态成员变量
静态成员变量:
1.所有对象共享的,并不属于具体的某个对象
2.在类中声明,然后需要在类外单独进行定义
3.一定不能在构造函数初始化列表的位置初始化
4.在类外访问静态成员变量时:对象.静态成员变量或着类名::静态成员变量
类成员的访问属性
class默认访问权限时private
struct默认访问权限时public
运算符的重载
每个非静态的成员函数都有一个隐藏的this指针
一元运算符:该元素只需要有一个参数,例如:++ –
前置++:Date& operator++()
后置++:Date operator++(int)
构造和析构
new的使用
创建对象时不会调用析构函数
模板的参数列表
常见的模板声明
有多个参数时,每个参数之前都必须加上class或typename
1.没参数
2.没class 或者typename
3.少了一个
5.少了一个
8.没关键字
day 10
内联函数
内联函数:在C++中被inline关键字修饰的函数,在编译阶段,编译器会将函数调用的位置用函数体直接替换。少了函数创建期间,函数压栈,创建栈帧的操作,提高运行效率。
但inline是建议性关键字,建议编译器把这个函数当成函数体操作,编译器自行判断该函数是否够短,频繁调用,没有嵌套递归等复杂操作。
B选项:inline与静态变量没什么关系
运算符重载
记住以下四个运算符即可
拷贝构造函数特点
拷贝构造函数也是一种构造函数,所以函数名与类名相同。
单参的,而且是对本类对象的引用,建议用const修饰
用已经存在的对象创建新的对象
A选项,构造函数是没有返回值的
C选项,编译器默认生成拷贝构造函数是公有的
类的常成员函数
注意:C选项的const实际修饰的是this指针,表明在该成员函数中,不能修改非静态成员变量
重载函数调用依据
与函数类型无关
调用构造函数次数
a[5]:代表着5个Myclass对象的一个数组,需要调用5次Myclass类的构造函数
b:史记为一个指针数组,该数组中的每个元素都是一个Myclass*,里面放的都是地址,所以创建的时候不会调用构造函数
- List item
初始化列表初始次序
在初始化列表中初始化成员的次序:与该成员在初始化列表中的先后次序没有关系,真正的初始化次序与成员变量在类中声明的先后次序保持一致
类的大小
类大小的计算方式:将类中非静态成员变量大小相加,注意内存对齐,与结构体大小计算方式类似。
与成员函数没有关系,类中只存成员变量,成员函数存在于代码段。
注意:空类大小不为0,在主流编译器将空类的大小设为1
阅读代码题
a类型:const int
&a类型:const int*
所以需要强转(int*)
注意:C++中被const修饰的变量,该变量已经是一个常量了,还具有替换的作用。
在编译器编译代码,在程序中看到对常量内容读取时,会直接使用常量中的内用替换该常量