![](/img/trans.png)
[英]C++ - Accessing member functions from a map of object pointers, in a seperate class via getter functions
[英]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;
不会编译。
obj
是Class*
类型的,因此您可以为其分配(以及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.