繁体   English   中英

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

[英]C++ class object pointers and accessing member functions

我对C ++有点陌生,尝试使用Qt进行工作,并遇到了这种令人困惑的事情:

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

Class *obj;

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

所以,我会做类似的事情

*obj=new Class();

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

-不知道为什么,因为对于普通对象[ normalObj.function1(); ]会起作用,因为这就是直接的价值。

因此,对于指针对象,我们为什么要使用内存引用来访问该函数,或者对于普通对象,也总是使用其引用

PS:有人可以指导我学习C ++中的指针用法的很好的教程,以便可以在其中直接解决诸如此类的查询。

*符号用于定义指针和取消引用指针。 例如,如果我想创建一个指向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();

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

您可以使用“正常” . 访问对象成员,但是您必须首先取消引用指针。

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

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

其实你错了 你做:

obj=new Class();

要么

Class *obj = new Class;

完全不同。

Class *obj;
*obj = new Class;

不会编译。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM