【问题标题】:is there a difference of initializing the derived class's base constructor by () or {}? [closed]通过 () 或 {} 初始化派生类的基构造函数有区别吗? [关闭]
【发布时间】:2020-03-23 23:16:55
【问题描述】:

我想知道我是否想使用基类中的构造函数 () 而不是 {} 来拥抱构造函数的参数,

是这样的:

class base
{
    private:
        int a , b;
    public:
        base(int a , int b) : a{a} , b{b} {};
}

class derived
{
    private:
        int c , d ;

    public:
        derived(int a , int b , int c , int d) : base(a , b) , c{c} , d{d} {};
                                                   ^
                                                   |

                                          //i mean above base(a , b) istead of base{a ,b}
}

【问题讨论】:

  • 当然是“未声明的标识符”。你能指出derived 的哪一行定义了ab 是什么吗?仅仅因为基类中有一些同名的参数,那并不意味着什么。首先构造的是派生类,它需要知道一切是什么。您需要弄清楚派生类需要将哪些参数传递给基类的构造函数,这只有您知道它应该是什么,因为只有您知道这些类应该如何工作。有关更多信息,请参阅您的 C++ 书籍。
  • 它应该看起来像derived(int input) : base(a,b),但您需要定义ab 是什么。你不能随便弥补。也许你的意思是derived(int intput, int a, int b) : base(a,b)
  • 您希望derived(int input) : base(a, b) 做什么?让我们看一个具体的案例。假设有人使用derived x{3}; 定义了一个变量——在构造x 时,您希望采取哪些步骤?什么价值观去哪儿了?

标签: c++ class inheritance constructor


【解决方案1】:

在您的class derived 中,您尝试使用两个值a, b 初始化基类。没关系,base 有那个构造函数。但是你从哪里得到a, b

除非它是一个我们看不到的全局变量,否则编译将失败,因为ab 未声明;在尝试初始化基类时,您还没有在任何地方创建它们。

【讨论】:

    猜你喜欢
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多