gpt4 book ai didi

C++参数构造函数评估

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:24 24 4
gpt4 key购买 nike

下面的程序如何评估以下内容? 1、参数化构造函数是如何求值的?左到右 ?

ZA (int n)0 ---> 调用了基类构造函数。

ZA (int n)2 --> 这里 m_i = 2 是怎么来的?

ZA (int n)0 ----> Zb中定义的ZA成员变量的构造函数调用

ZA (int n)0

ZB (int n)2

#include <iostream>
using namespace std;

class ZA
{
public:
ZA(int n = 0) : m_i(n)
{
std::cout <<"ZA (int n)" <<m_i<<endl;
++m_i;
}
protected:
int m_i;
};

class ZB : public ZA
{
public:
ZB(int n = 5) : m_a(new ZA[2]), m_x(++m_i)
{
std::cout <<"ZB (int n)" <<m_i<<endl;
}
~ZB()
{
delete [] m_a;
}
private:
ZA m_x;
ZA *m_a;
};

int main(void)
{
ZB b;
std::cout << std::endl;
}

最佳答案

这是发生了什么:

  • ZB(0) 被调用但不运行

  • 基础构造函数 ZA(0) 被调用 => "ZA (int n)0"and m_i = 1

  • 初始化器按照字段声明的顺序处理:

    • m_x(++m_i) 使用++1=2 => "ZA (int n)2"和 m_i = 2

    • m_a(new ZA[2]) 被评估并创建两个 ZA 实例 => "ZA (int n)0"两次

  • ZB 构造函数终于运行了 => "ZB (int n)2"

关于C++参数构造函数评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17214266/

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