----------------siwuxie095

  

  

  

  

  

  

  

  

  

对象指针

  

  

所谓对象指针,顾名思义,即用一个指针来指向一个对象

 

「对象指针,即 指向对象的指针」

  

  

看如下实例:

  

定义一个坐标类:Coordinate,其中有两个数据成员:m_iX 和 m_iY

  

对象指针

  

定义完成后,就可以去实例化它了

  

  

  

如果想从堆中实例化对象,可以使用Coordinate *p=new Coordinate;

使用Coordinate 接一个对象指针 *p,来指向一个对象,通过 new 运

算符来实例化对象后,这个对象就会执行它的构造函数

  

对象指针

  

  

重点说一说,指针p 和 对象在内存中的相关位置,以及它们的对应关系:

  

当使用这种方式实例化了一个对象之后,其本质就是在内存中分配出一块空间,

其中存储了m_iX 和 m_iY,此时,m_iX 的地址和 p 所保存的地址一致,即p

实际上指向的就是这个对象中的第一个元素

  

如果要访问元素可以使用指针的方式:p->m_iX p->m_iY,也可以在指针前面

加一个 *,使之变成一个对象,就可以使用点号访问:(*p).m_iX (*p).m_iY

  

  

  

  

  

使用时:

  

如果使用new 的方式去实例化这块内存空间,会调用构造函数

  

对象指针

  

  

需要特别强调的是,与C 语言相比,new malloc 有着本质的不同,

如果使用new 就可以自动调用相关对象的构造函数,而使用 malloc

则是单纯地分配内存,不会调用相关对象的构造函数

  

  

  

  

  

  

  

程序:

  

Coordinate.h:

  

class Coordinate

{

public:

Coordinate();

~Coordinate();

//同样的访问限定符可以出现多次

public:

int m_iX;

int m_iY;

};

  

  

  

Coordinate.cpp:

  

#include"Coordinate.h"

#include<iostream>

using namespace std;

  

  

Coordinate::Coordinate()

{

cout << "Coordinate" << endl;

}

  

Coordinate::~Coordinate()

{

cout << "~Coordinate" << endl;

}

  

  

  

main.cpp:

  

#include <stdlib.h>

#include"Coordinate.h"

#include <iostream>

using namespace std;

  

int main(void)

{

//从堆中实例化对象指针

//Coordinate *p1 = NULL;

//p1 = new Coordinate;

//Coordinate *p2 = new Coordinate();//注意两种不同的写法(在默认构造函数情况下)

//p1->m_iX = 10;

//p1->m_iY = 20;

//(*p2).m_iX = 30; //此时*p2是个对象

//(*p2).m_iY = 40;

//cout << p1->m_iX + (*p2).m_iX << endl;

//cout << p1->m_iY + (*p2).m_iY << endl;

//delete p1;

//p1 = NULL;

//delete p2;

//p2 = NULL;

  

//从栈中实例化对象

Coordinate p1;

// 对象指针p2指向p1(使用取地址符&),这样就可以

// 通过p2操纵p1的数据成员和成员函数

Coordinate *p2 = &p1;

p2->m_iX = 10;//(*p2).m_iX=10;

p2->m_iY = 20;//(*p2).m_iY=20;

cout << p1.m_iX << endl;

cout << p1.m_iY << endl;

system("pause");

return0;

}

  

  

  

  

  

  

  

  

  

  

  

【made by siwuxie095】

相关文章:

  • 2022-12-23
  • 2021-10-30
  • 2022-12-23
  • 2022-01-11
  • 2021-11-26
  • 2021-05-22
猜你喜欢
  • 2021-07-30
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案