关于类对象

时间:2011-03-13 07:49:10

标签: c++

我有一个关于类对象的非常基本的问题。创建类之后,我们需要创建一个类对象。在这一点上,我有点困惑,无论是*object还是object。例如:

  • CClass object
  • CClass *object

它们两者有什么区别?要访问类函数,我需要使用点'.'和箭头'->'。我知道用于访问类函数的点和箭头,但是点和箭头的重要意义是什么?

4 个答案:

答案 0 :(得分:7)

在函数中使用时,第一个方法在堆栈上创建一个对象,并使用.表示法调用方法。

CClass obj; 
obj.method();

重要说明:无论处理如何离开封闭函数,对象都将被销毁。

在函数中使用时,第二种方法在堆上创建一个对象。并且因为您正在处理指针,所以必须使用->符号

调用方法
CClass *obj = new CClass(); // obj is a pointer to a new object on the heap
obj->method();

重要提示:当您离开该功能时,此对象不会被销毁,这意味着您必须在其他地方管理其生命周期。如果您需要销毁可以使用的对象:

delete obj;

答案 1 :(得分:3)

CClass object定义名为object的{​​{1}}类型的对象。

CClassCClass *ptr_object

类型的对象定义指针ptr_object
  

我知道用于访问类功能的点和箭头,但是点和箭头的重要意义是什么?

CClass在语义上等同于ptr_object->func()

答案 2 :(得分:2)

前面带有星号的版本声明了一个指向对象的指针 - 您需要使用“new”关键字为此分配空间,并确保在对象完成时使用“delete”释放内存。

另一个(非加星标)声明将对象声明为局部变量,它会在堆栈上自动分配空间,并在超出范围时自动清理。

理解这是一个重要的区别,您可能希望通过一个好的C ++教程来获得对该语言如何工作的良好解释。在http://www.cplusplus.com/doc/tutorial/有一个。

答案 3 :(得分:1)

第二行是指向对象的指针的示例。箭头 - >是取消引用指针和访问成员的简写。

CClass * object;
//CClass has a public method Go and a public member variable Mine
object->Go();  //shorthand for (*CClass).Go()