对象数组
从名字上应该可以提取出此意就是一个存储对象的数组。
定义::类名对象名[]={};
我们需要重点知道的是对象数组的初始化:eg:Student Stu9[3]={
Student(1001,18,87),
Student(1002,19,76),
Student(1003,18,72)
};
这就是对象数组的初始化过程要牢记也是对象数组特殊的地方。
对象指针
(1).指向对象的指针
1.定义::类名*对象指针名。
2.使用:假若*p指向了对象a,所以通过对象指针来引用类内成员就是p--》h或者(*p).h。
(2).指向对象成员的指针
1.定义::数据类型名*指针变量名 eg::int *pl;
2.使用::pl=&t1.hour;(t1是定义好的对象);
(3)指向对象成员函数的指针
1.我们先区分一下指针指向普通函数的定义方法和指向对象成员函数的指针的定义方法
指向普通函数指针:数据类型名(*指针变量名)(参数表列)eg::void(*p)();
指向对象成员函数的指针:数据类型名(类名::*指针变量名)(参数表列)eg:void(time::*(p2))()
使用指针变量指向一个公用成员函数的一般形式是:指针变量名=&类名::成员函数名
指向当前对象的This指针
this指针的作用:解决如何公用函数代码。
this指针系统自动生成,并且是一个局部形参,指针变量。
this指针指向当前对象(哪个对象调用就在形参列表传入这个变量的地址)
可以显示使用但是不可以显示的说明和定义eg::int Box::volume(Box*this){return (thisàheight*thisàwidth*thisàlength)} 在形参那边的定义是错误的因为不能进行显示的说明和定义的,在函数体内是可以显示使用的。
This类型,是本类对象指针。
![](https://img-blog.csdnimg.cn/img_convert/64b5a1405dcfa289d057b6a205595d2d.png)
对象的赋值和复制
首先搞清楚复制和赋值的区别::赋值是指已经定义好了俩个对象或者多个对象,这些同类对象之间相互赋值,复制时指创建对象时,使用已有对象进行初始化。(对象的赋值只对其中的数据成员赋值,而不对成员函数赋值,由于不同的对象的成员函数也是同一个函数代码段也不需要给它进行赋值)
运算符::复制和赋值都是一样的运算符“=”区别就是“1”中所给的区别。
对象的赋值:形式::对象名1=对象名2;
对象的复制:形式::类名对象2(对象1)或者类名 对象名1=对象名2;
对象复制的作用:用已有对象对初始化新的对象
对象复制函数:(1).形参只有一个,只能是本类对象的引用 (2).若不定义复制构造函数,系统会自动生成完成复制(若自己定义了系统不干涉)
对象复制函数形式:eg::Box::Box(const Box&b)
{
height=b.height;
width=b.width;
length=b.length;
}
对象复制函数的使用场合:(1).程序中需要建立一个对象,并用另一个同类的对象对它初始化:形式::类名 对象2(对象1)或者类名 对象名1=对象名2;
(2)当函数的参数为类的对象时。Eg:
![](https://img-blog.csdnimg.cn/img_convert/1ca27aa909830b336687af3b189acc6b.jpeg)
(3).函数的返回值是类的对象.eg:
![](https://img-blog.csdnimg.cn/img_convert/94ba133955687fe73cced562886251e8.jpeg)
上面都是由系统自己自动实现的,我们不用去调用,但是必须知道它在上面情况下会调用。