对象数组和指针

声明一个对象数组

  •     Point a[2];//类名  数组名[常量表达式];
  •     Point a[2]={Point(1,2),Point(3,4)};//对象数组初始化的过程,实际上就是调用构造函数对每一个对象进行初始化。
  •     Point a[2]={Point(1,2) };//如果没有指定数组元素的初始值,就会调用默认构造函数。

调用单个数组元素公有成员

    a[0].show();//数组名[下标表达式].成员名


动态创建对象数组

Point *p=new Point;//动态创建对象,没有给出参数列表,调用默认构造函数

Point *p=new Point();//保留括号,但没有给出任何值,表示用0初始化对象

Point *p=new Point(p1);//动态分配了用于存p1的内存空间,并将初值2放入该空间

delete p;//删除对象,并自动调用析构函数


Point *p=new Point[10];//new 类型名 [数组长度],动态创建一维数组

p[0].move(5,10);//*p==p[0]

delete [] p;//删除整个对象数组


用vector创建数组对象(在调试状态下访问数组时检查下标越界错误,防止下标越界错误)

#include<vector>

vector<int> arr(10);//vector<元素类型>数组对象名(数组长度)。

vector<int>arr(10,2);/*vector定义的数组对象的所有元素都会被初始化:如果数组元素是基本类型,则以0初始化;

如果数组元素是类类型,则调用默认构造函数初始化,所以类必须有默认构造函数;也可以以上述指定初始值2,初

始化所有元素。*/

arr[0];//vector数组对象元素的访问,与普通数组相同


零碎知识点

const int *p=&a; //指向常量的指针,不能通过指针来改变所指对象的值,但指针本身可以改变。

int * const p=&a; //指针常量,指针本身的值不能改变。

void func(int p[])

void func(int p[3])

void func(int *p)//一维数组做参数,三者是等价的

int line1[]={1,0,0};

int line2[]={0,1,0};

int line3[]={0,0,1};

int *p[3]={line1,line2,line3};

for(int i=0;i<3;i++)

    for(int j=0;j<3;j++)

    cout<<p[i][j]<<endl;/*p[i][j]与*(p[i]+j)等价,先把指针数组p所存储的第i个指针读出,然后都出它所指向地址

后方的第j个数。*/

对象指针->成员名,(*对象指针).成员名,对象指针[].成员名是一致的

this指针作为一个隐含参数传递给非静态成员函数,用以指向该成员函数所属类所定义的对象。当不同的对象调用同一个类的成员函数代码时,编译器会依据该成员函数的this指针所指向的不同对象来确定应该引用哪个对象的数据成员。


猜你喜欢

转载自blog.csdn.net/Zxiaosong/article/details/80009509
今日推荐