C++类对象指针和访问成员函数

roc*_*win 13 c++ pointers class object

我对C++有些新意,并尝试用Qt处理事情,并遇到了这个令人困惑的事情:

各种教程的概念陈述如下:

Class *obj;
Run Code Online (Sandbox Code Playgroud)

*obj- 将显示存储在引用内存中的对象的值
obj- 将是它指向的内存地址

所以,我会做类似的事情

*obj=new Class();
Run Code Online (Sandbox Code Playgroud)

但如果我想访问一个函数,我必须做obj->function1(); 而不是*obj->function1();

- 不确定为什么,因为普通对象[ normalObj.function1();]会起作用,因为这是直接的值.

因此,对于指针对象,我们为什么要使用内存引用来访问函数,或者在普通对象的情况下,它总是引用它

PS:有人可以指导我在C++中使用指针的一个很好的教程,这样我的查询可以直接在其中解决.

Yok*_*a24 28

*符号用于定义指针和取消引用指针.例如,如果我想创建一个指向int的指针,我可以这样做:

int *ptr;

在这个例子中,*用于声明这是一个指向int指针.现在,当您没有声明指针并且使用*带有已声明指针的符号时,您将解除引用它.您可能知道,指针只是一个地址.取消引用指针时,您将获得该地址指向的值.例如:

int pointToMe = 5;
int *ptr = &pointToMe;
std::cout << *ptr;
Run Code Online (Sandbox Code Playgroud)

这将打印5.此外,如果您指定一个指向新地址的指针而且它不在声明中,则不使用该*符号.所以:

int pointToMe = 5;
int *ptr;
ptr = &pointToMe;
Run Code Online (Sandbox Code Playgroud)

你是怎么做的.您还可以使用指针来为地址指向的值分配新值.如:

int pointToMe = 5;
int *ptr = &pointToMe;
std::cout << *ptr; // Prints out 5
*ptr = 27;
std::cout << *ptr; // Prints out 27
Run Code Online (Sandbox Code Playgroud)

现在,->行为就像是尊重符号.它将取消引用指针,然后使用成员函数和变量,就像使用.非指针对象一样.即使对象不是指针,您也可以使用->先获取地址:

CObj object;
(&object)->MemberFunction();
Run Code Online (Sandbox Code Playgroud)

这只是指针的简要概述,希望它有所帮助.


Bo *_*son 6

您可以使用“普通”.来访问对象成员,但您必须先取消引用指针。

由于运算符的优先级,这看起来像(*obj).member。对于那些认为这样写太多的人来说,这obj->member是一个较短的选择。

如果您有一个c类型为 的对象Class,则*c.ptr意味着取消引用作为ptr的成员的指针Class。这是 的一个原因(*obj).member,这意味着别的东西。