gpt4 book ai didi

c++ - 构造函数 Parent 在构造函数 Child 的初始化列表中被调用

转载 作者:行者123 更新时间:2023-11-28 07:16:34 25 4
gpt4 key购买 nike

我有一个关于在另一个构造函数的初始化列表中调用构造函数的问题。例如,当查看这样的代码时:

Library::Child::Child
380 (
381  const word& controlName,
382  const argList& args,
383  const word& systemName,
384  const word& constantName
385 )
386 :
387  Parent
388  (
389  args.rootPath(),
390  args.caseName(),
391  systemName,
392  constantName
394  )
395 {}

在第 387 行调用了 Parent 类的构造函数:

   30 Library::Parent::Parent
31 (
32 const fileName& rootPath,
33 const fileName& caseName,
34 const word& systemName,
35 const word& constantName
36 )
37 :
38 processorCase_(caseName.find("processor") != string::npos), //private member
39 rootPath_(rootPath), //private member
40 case_(caseName), //private member
41 system_(systemName), //private member
42 constant_(constantName) //private member
43 {}

构造的主要对象是 Library::Child::Child 类型/类,但是在构造该对象时还有构造函数 Library::Parent::Parent调用父类 Parent 并定义类 Parent 的私有(private)成员。由于类 Child 不继承类 Parent 的私有(private)成员,而且在调用类 Parent 的构造函数时没有声明对象/变量(见行387,第一个代码片段)我不知道调用Parent 的构造函数有什么用?此外,Parent 类的私有(private)成员与 Child 对象的私有(private)成员有什么关系?由于没有声明类 Parent 对象,它们存储在哪里?我试图在网上查找有关它的信息,但找不到任何可以回答我问题的内容。

问候直

最佳答案

您似乎误解了 c++ 中的一些基本概念。派生类继承其父类的所有内容。它可能无法访问它。它不像“哦,它是私有(private)的,所以它不存在”。

我认为您的其他问题都来自这种误解。也可能来自声明定义 的意思。您可以想象 c++ 中的派生就像扩展基类一样。在内存中,Derived 内容有点粘附到 Base

如果没有 BaseDerived 内容将毫无意义。它是 Base 的扩展。因此,Base 类对象始终被实例化。即使派生类无法访问它。这就是为什么 Base 的构造函数在 Derived 的构造过程中被调用的原因。它总是被调用。即使没有显式地调用,也会调用隐式的默认构造函数。

Child 构造函数调用Parent 构造函数,并且不访问任何私有(private)成员。 Parent::Parent() 可以。它没有定义它们,而是初始化它们,它们在Parent类定义中定义。

对象也总是声明。您不能从未声明的对象派生。你也不能对未声明的对象做任何事情。所以你的 Parent 必须声明,否则编译器会抛出错误。

关于c++ - 构造函数 Parent 在构造函数 Child 的初始化列表中被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20144706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com