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

时间:2012-07-07 07:27:07

标签: c++ class object pointers

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

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

Class *obj;

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

所以,我会做类似

的事情
*obj=new Class();

但如果我想访问某个功能,我必须obj->function1(); 而不是*obj->function1();

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

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

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

4 个答案:

答案 0 :(得分:28)

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

int *ptr;

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

int pointToMe = 5;
int *ptr = &pointToMe;
std::cout << *ptr;

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

int pointToMe = 5;
int *ptr;
ptr = &pointToMe;

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

int pointToMe = 5;
int *ptr = &pointToMe;
std::cout << *ptr; // Prints out 5
*ptr = 27;
std::cout << *ptr; // Prints out 27

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

CObj object;
(&object)->MemberFunction();

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:3)

实际上,你错了。你这样做:

obj=new Class();

Class *obj = new Class;

完全不同。

Class *obj;
*obj = new Class;

不会编译。

obj属于Class*类型,因此您可以为其分配(以及new Class返回的内容)。

答案 3 :(得分:1)

更确切地说,你可以这样做

Class  obj;
Class* obj_ptr;

obj_ptr = &obj;

// Now onwards you can use the pointer to access data members and function

obj_ptr->a = 10; // Like this