【发布时间】:2013-09-10 21:01:46
【问题描述】:
这是一个计算cpp代码的简单矩形区域,我有一些问题:
#include <iostream>
#include <conio.h>
using namespace std;
class CRectangle
{
int *width, *heigth;
public:
CRectangle(int, int);
~CRectangle();
int area() { return (*width * *heigth);}
};
CRectangle :: CRectangle(int a, int b)
{
width = new int;
heigth = new int;
*width = a;
*heigth = b;
}
CRectangle :: ~CRectangle()
{
delete width;
delete heigth;
}
void main()
{
CRectangle rect1(3,4), rect2(5,6);
cout << "rect1 area = " << rect1.area() << "\n";
cout << "rect2 area = " << rect2.area();
getch();
}
- 为什么在这种面向对象的代码中我们使用指针,我的意思是有什么优势?
- 在创建对象
rect1(3,4)之后的这段代码中,我们创建rect2(5,6),这样做,逻辑上(我认为)在宽度和高度指向的内存部分中替换了5和6而不是3和4,所以 3 和 4 不再可用,但它们是。
请解释到底发生了什么?
【问题讨论】:
-
在这里使用指针绝对没有优势,还有一些非常明显的劣势。代码可能是由更熟悉不同语言(如 Java)的人编写的,其中 all 变量是使用
new创建的。 -
1) 使用这样的指针没有任何好处。这不是指针的好用法。 2) 您为 (5, 6) 创建/分配两个 new 整数。您没有使用旧内存。它们不重叠。他们不会覆盖。它们是完全独立的,因为每个都有自己的
new调用。 -
由于您是新手,让我指出使用标准库的指针比使用裸指针更有帮助。例如
<unique_ptr>或<shared_ptr> -
每个 CRectangle 对象都有自己的宽度和高度指针。它们不共享。
-
只是一个小小的挑剔...“身高”通常不拼写为“身高”...;-P
标签: c++