【问题标题】:What does the following code do? c++ [duplicate]下面的代码有什么作用? C++ [重复]
【发布时间】:2017-07-20 01:28:26
【问题描述】:

我的教授今天在黑板上写了一些我看不懂的代码。它似乎是一个派生类构造函数调用一个基类构造函数,但我不确定。如下:

class Base{
int x, y;
public:
Base(int,int);
};

class Derived: public Base{
int z;
public:
//what does the colon and the code following it do here? 
Derived(int a):Base(a, a+5){
z = a;
}
};

【问题讨论】:

  • 你的怀疑是正确的
  • 你可以问教授(或助教)
  • 您可以轻松完成自己的实验。 Herehere,然后研究为什么第一个编译失败,而老师的版本编译成功。
  • 如果你不明白,你应该请你的老师解释。他们获得报酬是为了向您提供所需的信息,并确保您了解所提供的材料。

标签: c++ inheritance


【解决方案1】:

这是Inheritance 的一个基本示例。基本上,Derive 继承自 Base

描述代码:Base 类有两个私有整数成员 (x, y),应该使用给定的构造函数进行初始化。

Derived 类继承自 B,并拥有自己的私有成员 (z)。

Derived的构造函数用参数*(a, a+5)初始化Base类,然后将值a赋值给私有参数z

**(我们没有构造函数的实现,但可以假设(x = a, y = a + 5))*

【讨论】:

    【解决方案2】:

    我相信它会使用传入 Derived 类的构造函数的任何“a”值来初始化 Derived 类,并将第二个值初始化为 a+5。然后将值 z 设置为传递给 Derived 类的构造函数的任何值。冒号初始化基类中的项目。

    【讨论】:

      【解决方案3】:

      派生类是从基类派生或继承的。 Base 类在其构造函数中接受两个整数。

      假设这是 Base 类的定义方式,

      class Base {
      
          int x;
          int y;
      
      public:
      
          Base(int x, int y) {
              this->x = x;
              this->y = y;
          }
      }
      

      Derived 类的声明方式允许 Derived 类从 Base 类继承 x 和 y 的值。

      此表示法使用传递给派生类的值“a”调用基类构造函数。

      使 Base 类的第一个参数等于 a,第二个参数等于 a + 5。

      如果我在实例化 Derived 类时传递了 5,那么我将使用值 5 和 10 调用基类构造函数。

      此外,派生类成员 z 现在拥有 a 的值。

      【讨论】:

        【解决方案4】:

        构造函数可以按顺序执行,在初始化之前需要一些准备工作

        在您的代码中,调用基类构造函数,然后调用派生类构造函数。 了解更多信息

        Order of Construction

        【讨论】:

          【解决方案5】:

          尝试搜索 c++ delegate constructor 或查看此链接。 在您拥有的代码中,调用 Base 构造函数,然后运行 ​​Derived 构造函数的主体。

          您可以跳到示例部分并阅读 cmets 行。

          http://en.cppreference.com/w/cpp/language/initializer_list

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-06-15
            • 1970-01-01
            • 1970-01-01
            • 2016-03-21
            • 1970-01-01
            • 2016-02-14
            • 1970-01-01
            相关资源
            最近更新 更多