0

我正在阅读 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;

为什么需要两次声明指针?

4

6 回答 6

4

不,它们只声明一次,并且在构造函数中分配了值。

于 2013-05-15T12:25:53.930 回答
3

1) 宽度 = 新整数;

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

2) int *with -> 是一个声明。

希望这可以帮助。

于 2013-05-15T12:26:41.750 回答
1

变量在类主体中声明(即告诉编译器指向 int 的指针存在,名称为widthheightint *width, *height;

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

于 2013-05-15T12:26:11.737 回答
1

宽度 = 新整数;不声明,它从堆中分配内存。

于 2013-05-15T12:26:52.620 回答
0

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

width = new int;实际分配内存

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

于 2013-05-15T12:26:38.837 回答
0

宽度和高度只声明一次:

首先,你告诉宽度和高度是*int

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

(...)

然后,你给 width 和 height 一个值(它是一个指针):

CRectangle::CRectangle (int a, int b) {
  width = new int; // assignment
于 2013-05-15T12:26:57.567 回答