【问题标题】:C++ class object pointers and accessing member functionsC++ 类对象指针和访问成员函数
【发布时间】:2012-07-07 13:23:37
【问题描述】:

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

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

Class *obj;

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

所以,我会做类似的事情

*obj=new Class();

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

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

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

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

【问题讨论】:

标签: c++ class object pointers


【解决方案1】:

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

现在,-&gt; 就像尊重符号一样。它将取消引用指针,然后使用成员函数和变量,就像您使用 . 和非指针对象一样。即使使用不是指针的对象,您也可以通过首先获取地址来使用-&gt;

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

      其实你错了。你这样做:

      obj=new Class();
      

      Class *obj = new Class;
      

      完全不同。

      Class *obj;
      *obj = new Class;
      

      无法编译。

      objClass* 类型,所以这就是您可以分配给它的内容(以及 new Class 返回的内容)。

      【讨论】:

        【解决方案4】:

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

        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
        

        【讨论】:

          猜你喜欢
          • 2016-05-24
          • 1970-01-01
          • 2011-04-27
          • 2018-09-12
          • 2013-10-13
          • 1970-01-01
          • 1970-01-01
          • 2015-07-28
          • 2013-06-14
          相关资源
          最近更新 更多