指向C++中对象的指针
Pointer to object in C++
我在Stackoverflow.com
中看到了以下代码。我一直在寻找相同的代码,因为我有疑问。如果我们将看到以下代码CRectangle r1, *r2;
r2= new CRectangle;
1.我们为什么要做new CRectangle
?我们到底想做什么?
- 一位同事告诉我,当我们编写代码时,
CCD_ 5
然后我们用一些其他值或地址initialize
。我真的很困惑。请帮帮我。
using namespace std;
class CRectangle
{
int width, height;
public:
void set_values (int, int);
int area (void) {return (width * height);
}
};
void CRectangle::set_values (int a, int b)
{
width = a;
height = b;
}
int main ()
{
CRectangle r1, *r2;
r2= new CRectangle;
r1.set_values (1,2);
r2->set_values (3,4);
cout << "r1.area(): " << r1.area() << endl;
cout << "r2->area(): " << r2->area() << endl;
cout << "(*r2).area(): " << (*r2).area() << endl;
delete r2;
return 0;
}
C角度r1,*r2;r2=新的C角度;
r1
是对象。r2
是指向对象的指针。
CRectangle *r2 = 0;
指针包含对象的地址。如果指针没有初始化,它可以有任何值(我们不知道)。因此,我们初始化0
,这样我们就知道我们的指针有值0
。我们可以使用该值来避免双重初始化或某些内存错误。
当我们准备将对象分配给指针时,我们通常要做的是_
if (r2 == 0)
r2 = new CRectangle;
else
std::cout << "Pointer is not empty or invalid" << std::endl;
在您的示例中,r1
具有CRectangle
类的类型,但r2
具有指向CRectangle类的指针类型。指针只是全局内存(堆)中的地址。为了将内存分配并标记为CRectangle
对象,我们需要使用new
。
请阅读
CRectangle r1, *r2;
r2= new CRectangle;
这段代码声明了一个CRectangle
对象(r1
)和一个指向CRectangle
对象的指针,该对象还没有指向任何东西(r2
)。这两个变量都是在堆栈上分配的。
第二行为新的CRectangle
对象(来自堆)分配内存,调用该类的任何构造函数,然后返回地址并将其分配给r2
。因此CCD_ 22然后指向一个CCD_ 23对象。
将r2
设置为0或NULL
只是指示指针实际上没有指向任何东西的标准方式。
相关文章:
- 为什么指针对象没有调用默认构造函数
- 如何访问双指针对象中的方法
- 如何使用智能指针对象执行成员函数指针
- 调用带有指针对象错误的指针变量
- 如何从模板类重载创建的指针对象上的运算符?
- C++指针对象的运算符重载
- 如何初始化数组指针对象
- 如何打印出唯一指针对象向量中的值(基于范围的循环)?C++
- C++指针对象差异
- 涉及继承,指针对象的交易以及何时进行的问题
- 表达式必须在C 中具有指针对象类型
- 下标需要数组或指针类型表达式必须具有指针对象类型
- 字符指针对象和相应的字符数组元素比较
- 如何在 c++ 中克隆为弱指针对象
- 指针对象使用CPP中的指针表达式进行比较
- Visual Studio中智能指针对象的自定义视图
- 使用指针 /对象 /模板参数正确构成
- 如果我确定只有一个线程一次处理指针/对象,则C/C 仍应使用同步
- 如何将值分配给指针对象 c++
- 更改智能指针对象,然后访问它