在C ++ Documentation Tutorial的这个例子中,为什么指针被声明两次?

时间:2013-05-15 12:24:01

标签: c++ pointers constructor

我正在完成C ++文档教程,并且我在理解在构造函数中使用指针的示例时遇到了一些麻烦:

// example on constructors and destructors
#include <iostream>
using namespace std;

class CRectangle {
    int *width, *height;
  public:
    CRectangle (int,int);
    ~CRectangle ();
    int area () {return (*width * *height);}
};

CRectangle::CRectangle (int a, int b) {
  width = new int;
  height = new int;
  *width = a;
  *height = b;
}

CRectangle::~CRectangle () {
  delete width;
  delete height;
}

int main () {
  CRectangle rect (3,4), rectb (5,6);
  cout << "rect area: " << rect.area() << endl;
  cout << "rectb area: " << rectb.area() << endl;
  return 0;
}

似乎指针*width被声明了两次。它在类的最开始声明:int *width, *height;,并且在构造函数初始化width = new int;时也会声明它。

为什么有必要两次声明指针?

6 个答案:

答案 0 :(得分:4)

不,它们只被声明一次,并且在构造函数中被赋值。

答案 1 :(得分:3)

1)width = new int;

 It is not a declaration. You are allocating memory and assigning to width. 

2)int * with - &gt;是宣言。

希望这会有所帮助。

答案 2 :(得分:1)

变量在类体中声明(即告诉编译器指向int的指针,名称为 width height ),语句为{{1} }。

在构造函数中,为它们分配了一个值,通过使用new运算符,它不是声明。

答案 3 :(得分:1)

width = new int; 没有声明,它从堆中分配内存。

答案 4 :(得分:0)

int *width, *height;这只是delcares占位符

width = new int;实际分配内存

只是为了咯咯笑,尝试在构造函数中评论你的所有new并看到......你的程序可能崩溃(http://ideone.com/bnxvKA),否则你会得到未定义的行为。

答案 5 :(得分:0)

宽度和高度仅声明一次:

首先,您告诉宽度和高度为*int

class CRectangle {
    int *width, *height; // declaration

(...)

然后,给宽度和高度一个值(这是一个指针):

CRectangle::CRectangle (int a, int b) {
  width = new int; // assignment