我有一个关于在另一个构造函数的初始化列表中调用构造函数的问题。例如,在查看这样的代码时:
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
,但在构造该对象时,也调用父类Parent
的构造函数Library::Parent::Parent
,并定义类Parent
的私有成员。由于类Child
不继承类Parent
的私有成员,而且在调用类Parent
的构造函数时没有声明对象/变量(参见第387行,第一段代码段),所以我不知道调用Parent
的构造函数有什么好处?此外,类Parent
的私有成员与类Child
对象在什么连接中,由于没有声明类Parent
对象,它们存储在哪里?我试着在网上找到关于它的信息,但是找不到任何东西来回答我的问题。
问候街头
发布于 2013-11-22 04:49:27
您似乎了解c++
中的一些基本概念。派生类继承父类中的所有内容。它可能无法访问它。它不像“哦,它的私人,所以它不存在”。
我认为你的其他问题来自于这种误解。也许是根据什么宣言和定义。可以想象在c++
中进行派生,就像扩展基类一样。在记忆中,Derived
的东西有点粘在Base
上。
如果没有Derived
,那么Base
就没有意义了。它是Base
的扩展。因此,Base
类对象总是被实例化。即使派生类没有访问它的权限。这就是为什么在构建Base
时调用Derived
的构造函数的原因。它总是被称为。即使没有显式,也会调用隐式默认构造函数。
Child
构造函数调用Parent
构造函数,不访问任何私有成员。Parent::Parent()
有。它没有定义它们,而是初始化它们,而是在Parent
类定义中定义它们。
而且,对象总是被声明的。不能从未声明的对象派生。也不能对未声明的对象执行任何操作。所以必须声明您的Parent
,否则编译器会抛出错误。
https://stackoverflow.com/questions/20144706
复制相似问题