gpt4 book ai didi

c++ - 变量和对象创建的范围

转载 作者:行者123 更新时间:2023-11-28 06:15:28 26 4
gpt4 key购买 nike

以下代码来自在线 C++ 测验部分 http://www.interqiew.com/ask?ta=tqcpp02&qn=3 - 我无法找出答案 - 我已经添加了打印语句 -

这是我的理解

步骤 A - 对象 B 的创建从参数 m_x 的 B 的构造函数开始 - 我们到达基类 A -- 第 1 步执行输出 0 - 并将 m_i 递增到 1

步骤 B - 代码现在变为 m_x(2) -- 第 1 步执行输出 2 并将 m_i 递增到 3创建 m_x 完成

步骤 C - 代码到达 A[2](所以对于下面的两个对象会发生) -- 第 1 步执行输出 0 并将 m_i 递增到 1创建 A[0] 和 A[1] 完成

我正在用 3 个容器 m_x、A[0] 和 A[1] 可视化对象 b,每个容器的值为 m_i

我不明白下面的输出 - 我们如何获得输出 2 - 使用了哪个 m_i 值?

Step D——进入step3区域 -- 第 3 步执行输出 2

输出-

步骤 1 --- 01个步骤 1 --- 23个步骤 1 --- 01个步骤 1 --- 01个第 3 步 ----2

class A
{
public:
A(int n = 0)
: m_i(n)
{
std::cout << "step 1 --- " << m_i << endl;
++m_i;
std::cout << m_i << endl;
}

protected:
int m_i;
};

class B
: public A
{
public:
B(int n = 5) : m_a(new A[2]), m_x(++m_i)
{
std::cout << "step 3 ----" << m_i << endl;
}

~B() { delete [] m_a; }

private:
A m_x;
A *m_a;
};

int main()
{
B b;

std::cout << std::endl;

return 0;
}

最佳答案

主要是构建一个B

但是B继承了一个A

那就先做吧。所以m_i被初始化和std::cout << "step 1 --- " << m_i << endl;被执行。

B 构造函数的处理继续进行。

然后m_x其次是 m_a将被初始化——而不是编译器在这里重新排列东西!

对于 m_x A constructor 被 new 运算符调用了两次。其次是一次为m_a - 即 3 x ``std::cout << "step 1 --- "<< m_i << endl;` 被执行。

然后是构造函数的其余部分,即 td::cout << "step 3 ----" << m_i << endl;被执行。第 2 步发生了什么是个谜。

关于c++ - 变量和对象创建的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30416485/

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