我正在完成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;
时也会声明它。
为什么有必要两次声明指针?
答案 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