- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个关于在另一个构造函数的初始化列表中调用构造函数的问题。例如,当查看这样的代码时:
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
。
如果没有 Base
,Derived
内容将毫无意义。它是 Base
的扩展。因此,Base
类对象始终被实例化。即使派生类无法访问它。这就是为什么 Base
的构造函数在 Derived
的构造过程中被调用的原因。它总是被调用。即使没有显式地调用,也会调用隐式的默认构造函数。
Child
构造函数调用Parent
构造函数,并且不访问任何私有(private)成员。 Parent::Parent()
可以。它没有定义它们,而是初始化它们,它们在Parent
类定义中定义。
对象也总是声明。您不能从未声明的对象派生。你也不能对未声明的对象做任何事情。所以你的 Parent
必须声明,否则编译器会抛出错误。
关于c++ - 构造函数 Parent 在构造函数 Child 的初始化列表中被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20144706/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!