我们之前讲的都是类与对象的基础,以及类中的几个默认函数等,今天我们就讲一下类与对象的其他东西
初始化列表
在我们的默认构造函数的时候,我们在初始化的时候我们都是在构造函数中完成我们的初始化任务
我们现在来看一个类
我们看一下我们的这个类,如果我们的这个类需要初始化的化,我们需要怎么初始化呢??
我们可以这样初始化吗?? 不可以!
首先是const类型的对象,我们的const类型的对象只有一次初始化的机会,就是在对象定义的时候,但是我们的构造函数是在构造一个对象,所以当我们走到构造函数的括号里时,我们的这个对象就以及拥有了,所以我们就不可以对const的对象进行赋值了,所以我们应该怎么办呢??
这里就提到了我们的初始化列表
这里就是我们的初始化列表,因为有一些值时必须在定义的时候初始化号,所以我们就必须使用到初始化列表
我们来看一下
我们的A a变量现在就被初始化好了,其中我i们也可以不用这样,我们还可以这样
我们可以性和杨,在类的声明那里直接给值,但是记住这里时声明并不是定义,这里也是C++后面的语法,为了处理C++的构造函数对内置类型不处理搞的,而这里的const int _a = 0里面的赋值0并不是在初始化的时候给,而是给了初始化列表,我们这里要清楚的是,我们不论写不写初始化列表 ,我们的对象初始化的时候都会走初始化列表
我们也可以看一下其他的初始化列表的使用
我们看到我们的A a对象被初始化了,同样我们还可以给值
我们看到,是可以的
这就是初始化列表
static 成员变量
我们在看一下 static成员变量
对于static的局部变量,我们的局部变量的生命周期就会增加,生命周期和进程的生命周期相同,那么如果是static的成员变量呢??
我们来看一下,我们的这个类的大小是多少呢??
OK,是4
我们这里有两个变量,其中一个是int 的,另一个是static int 的,但是我们这里只有4,说明我们的static int 的这个变量并未计算到A这个类的对象中,所以我们就能说明,我们的a变量是属于整个类的,而并不属于单个对象
而我们的这个对象的初始化也是不一样
我们的初始化 也是需要这样初始化
我们继续看一下
我们这里看到我们对a变量加了一次,但是我们的a1和a2变量里面的a对象都是11所以这里更说明我们的static对象是属于类的,而不属于对象
static 成员函数
我们刚才看了static的成员变量,我们现在看一下static的成员函数
这里就直接说static成员函数的特征了,对于我们的成员函数而言,我们的成员函数有隐藏的this指针,而我们的static的成员函数没有隐藏的this指针,而我们的static的函数调用也是不一样,我们可以不使用对象调用,我们可以直接使用类和类作用限制符调用
我们来看一下
当然,也并不是我们不可以用对象调用
我们看到是可以的
那么我们的static的成员函数可以访问私有的成员变量吗??
其实这里我们想一下也知道不可以,为啥呢??
因为我们刚才讲了,我们的static成员函数没有this指针,所以我们也就无法通过我们的this指针去访问我们的 private成员变量
OK今天就到这里~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~