指向课程的指针

时间:2009-09-02 22:43:01

标签: c++ data-structures oop pointers

查看“Pointers to classes”(非常底部)下的示例

我们如何在这里使用点操作符:

CRectangle * d = new CRectangle[2];
...
d[1].set_values (7,8);

如果d是指针?

相同的问题:

  cout << "d[0] area: " << d[0].area() << endl;
  cout << "d[1] area: " << d[1].area() << endl;

另外,对于声明:

  CRectangle * d = new CRectangle[2];

我们可以在不声明对象的情况下声明指向该类型的指针吗?

5 个答案:

答案 0 :(得分:3)

d是指向CRectangle对象数组的指针(在本例中为2)。 d [i]是第i个CRectangle对象。所以当你说d [i] .set_values()时,你实际上是在该数组中第i个CRectangle对象上调用set_values方法。

答案 1 :(得分:3)

在这种情况下,指针实际上是一个数组,其中包含两个对象。首先将“d”构造为具有2个元素的数组:

CRectangle * d = new CRectangle[2];
// which is the dynamically allocated version of..
CRectangle d[2];

然后,它通过以下方式访问第二个元素的area()方法:

d[1].area()

答案 2 :(得分:3)

在您的示例中,虽然d确实是指针,但d[1]不是。它是*(d+1)处对象的引用。

答案 3 :(得分:1)

  1. '。'使用而不是取消引用' - &gt;'因为虽然d是指针,但它指向的对象确实不是指针,因此d [1]返回一个非本地指针对象。
  2. 这个意义上的new运算符是有效的,因为CRectangle类有一个默认的构造函数,但是在没有默认构造函数的情况下,这是不可能的。会发生什么是为两个矩形对象分配空间,每个矩形对象都是通过默认构造函数构造的。

答案 4 :(得分:1)

以为我只是添加你要使用' - &gt;'的情况操作者:

CRectangle* d[2];
d[0] = new CRectangle();
d[1] = new CRectangle();
d[0]->set_values(7,8);