Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 关于类对象_C++ - Fatal编程技术网

C++ 关于类对象

C++ 关于类对象,c++,C++,我有一个关于类对象的非常基本的问题。创建类之后,我们需要创建一个类对象。在这一点上,我对使用*对象或对象感到有点困惑。例如: CClass对象 CClass*对象 他们俩有什么不同?要访问类函数,我需要使用点'.和箭头'->'。我知道dot和arrow用于访问类函数,但dot和arrow的重要意义是什么?在函数中使用时,第一个方法在堆栈上创建一个对象,并且使用符号调用方法 CClass obj; obj.method(); 重要提示:无论处理如何离开封闭函数,对象都将被销毁 在函数中使用

我有一个关于类对象的非常基本的问题。创建类之后,我们需要创建一个类对象。在这一点上,我对使用
*对象
对象
感到有点困惑。例如:

  • CClass对象
  • CClass*对象

他们俩有什么不同?要访问类函数,我需要使用点
'.
和箭头
'->'
。我知道dot和arrow用于访问类函数,但dot和arrow的重要意义是什么?

在函数中使用时,第一个方法在堆栈上创建一个对象,并且使用
符号调用方法

CClass obj; 
obj.method();
重要提示:无论处理如何离开封闭函数,对象都将被销毁

在函数中使用时,第二个方法在堆上创建一个对象。由于您处理的是指针,因此必须使用
->
符号调用方法

CClass *obj = new CClass(); // obj is a pointer to a new object on the heap
obj->method();
重要提示:当您离开函数时,此对象不会被销毁,这意味着您必须在其他地方管理其生存期。如果需要销毁对象,可以使用:

delete obj;

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

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

CClass对象
定义类型为
CClass
的名为
object
的对象

CClass*ptr_对象
定义指向类型为
CClass

我知道dot和arrow用于访问类函数,但dot和arrow的重要意义是什么


ptr\u object->func()
在语义上等同于
(*ptr\u object)。func()

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

另一个(无星号)声明将对象声明为局部变量,该变量在堆栈上自动分配空间,并且在超出范围时自动清理


<>这是一个重要的区别,你可能想通过一个好的C++教程来解释语言是如何工作的。有一个在

“第二个方法”不必在堆上创建对象<代码>类别obj;C类*ptr和obj。“第一个方法”不一定在堆栈上创建对象<代码>类其他类{CClass member;};OtherClass*o=新的OtherClass@James&@molbdnilo-感谢您在我的回答中指出了几个缺点,我已经澄清了措辞。感谢您的回复。我真的很感激。可能的副本