【问题标题】:OOP C++, virtual functions and new operatorOOP C++、虚函数和新运算符
【发布时间】:2012-07-27 21:05:01
【问题描述】:

我必须在下面写下代码的定义。我不了解 OOP Cpp 的一些基础知识,我知道什么是 *x&x,但这还不够……主要的事实是我无法理解行 B* p = new D, m, *k; 我无法理解 m*k 是什么代表。

class B {
  public: 
    virtual void msg() { cout << "classB"; }
};

class D: public B {
   public: 
     virtual void msg() { cout << "classD"; }
};

int main() {
  B* p = new D, m, *k;
  p->msg(); k = &m; k->msg();
  . . .
}

帮助,如果您能解释一下这段代码如何(以及为什么这样)将起作用。

谢谢你的时间。

【问题讨论】:

    标签: c++ oop pointers virtual-functions


    【解决方案1】:

    它一次声明多个变量。这与以下基本相同:

    B *p = new D;
    B  m;
    B *k;
    

    所以p 是一个指向D 实例的指针,它是用new 分配的。 m 是类 B 的本地实例,k 是指向 B 的指针,后来被分配为指向 m

    msg 函数通过指针pk 在两个分配的对象上调用。

    请注意,* 分别适用于每个变量声明。所以B* a, b; 没有声明两个指针,而是声明了一个指针和一个本地对象。这就是很多人喜欢在变量名前直接写* 的原因:B *a, b 使这一点更加明显。

    【讨论】:

      【解决方案2】:

      在 C++ 中,您可以在一个语句中声明多个变量。因此B* p = new D, m, *k; 声明了变量pmk。用于指针声明的* 绑定到变量名,因此它与

      基本相同
      B* p = new D;
      B m;
      B* k;
      

      【讨论】:

        【解决方案3】:

        没什么花哨的,只是普通的老 C。

        B* p = new D, m, *k;
        

        只是以下的快捷方式:

        B* p = new D;
        B m;
        B* k; 
        

        【讨论】:

          【解决方案4】:

          p 是指向 B 类(或 D,因为它是 B 类的子对象)的对象的指针。 p-&gt;msg(); 类似于 (*p).msg();m 是 B 类的对象,所以我们可以通过 &amp; 操作符获取指向它的指针,并将其存储在 k 中(这是指向 B 类对象的指针)。

          B* p = new D, m, *k;
          

          只是

          B* p = new D;
          B m;
          B* k;
          

          注意:如果每次都需要,请输入*

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-01-30
            • 2016-02-05
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多