对象数组与指针+this指针

对象数组:

建立对象数组的时候,如果有五十个元素就会调用五十个元素

在需要的时候可以在定义数组的时候进行初始化


当      :

构造函数只有一个参数的时候

student  stu[3]={30,70,21};

多个参数的时候(注意逗号和分号)

student stu[3]={
    student(110,25,15),
    student(22,5,4),
    student(45,65,7)
};


综合例子

#include<iostream>
using namespace std;

class box
{
private:
    int height,width,lenth;
public:
    box(int a=10,int b=10,int c=10):height(a),width(b),lenth(c){}
    int volume();
};

int box::volume()
{
    return height*width*lenth;
}

int main()
{
    box a[3]={
        box(12,5,14),
        box(55,54,4),
        box(7,9,1)
    };

    cout<<"volume of a[0] is "<<a[0].volume()<<endl;
    cout<<"volume of a[1] is "<<a[1].volume()<<endl;
    cout<<"volume of a[2] is "<<a[2].volume()<<endl;
    return 0;
}



对象指针:

对于指向对象成员就不多讲了,和c 的结构体类似

对于不常用的指向对象成员函数的指针稍微注意一下:


普通的函数指正变量定义方法:  

 类型名 (* 指针变量名)(参数列表)

例如:

void (*p)();

定义指向成员函数的指针变量:

指针变量名(类名::*指针变量名)(参数列表)

void (student::*p)();
这里的括号一定不能省略,因为括号的优先级比 * 要高

如果没有的话相当于:

void (student::*(p2()));

这里表示返回值位void型的指针函数


定义之后当然是需要使用指向一个共有成员函数

指针变量名=&类名::成员函数名;

例如:(综合的例子)

void (student::*p3)()=&student::display;
没有括号;


this指针
每一个对象数据成员都分别独自占有存储空间,方便存储每一个对象的成员数据的值,如果同时定义n个对象,就有n组同样大小的空间以存放n个对象数据成员

注意:

           不同的对象都是调用同一个函数的目标代码


因此我们需要知道在每一个成员函数中都有一个特殊的指针

     这个指针指引我们走向一个正确的存储地址,处理相应的对象的数据






你可能感兴趣的:(对象数组与指针+this指针)