首页 > 试题广场 >

如下代码,result变量的输出结果是多少?

[不定项选择题]
如下代码,result变量的输出结果是多少?
#include<iostream>
using namespace std;
int i=1;
class MyCls{
public:
	MyCls():m_nFor(m_nThd),m_nSec(i++),m_nFir(i++),m_nThd(i++){
		m_nThd=i;
	}
	void echo(){
		cout<<"result:"<<m_nFir+m_nSec+m_nThd+m_nFor<<endl;
	}
private:
	int m_nFir;
	int m_nSec;
	int m_nThd;
	int &m_nFor;
};
int main()
{
	MyCls oCls;
	oCls.echo();
	return 0;
}
  • 10
  • 11
  • 9
  • 12
  • 8
推荐
首先要明白变量初始化的顺序是其声明的顺序,跟初始化列表中的顺序无关。所以变量的初始化顺序为m_nFir(i++),m_nSec(i++),m_nThd(i++),&m_nFor(m_nThd);
i初始值为1,所以经过初始化列表初始化以后m_nFir=1,m_nSec=2,m_nThd=3,m_nFor为m_nThd的一个引用。
并且此时i的值为4,构造函数中执行语句m_nThd=i后,m_nThd=4,m_nFor是它的一个引用,自然值也为4。
输出结果m_nFir+m_nSec+m_nThd+m_nFor=1+2+4+4=11

编辑于 2016-03-25 10:35:47 回复(10)
我是这么理解的:

程序初始化的时候是根据在类中声明的顺序进行初始化。所以先给m_nFir赋值……一直到m_nThd = 3。
然后执行m_nFor = m_nThd。此时m_nFor 和 m_nThd都是3。但是i = 4。
然后执行构造函数,m_nThd = 4。因为m_nFor是引用类型,所以m_nFor此时也变为4。
所以答案是1+2+4+4=11.
发表于 2015-09-08 17:02:18 回复(5)
构造函数中变量的初始化顺序是按其定义的顺序,与初始化列表中的顺序无关。所以一定要注意。
发表于 2016-05-19 16:06:31 回复(1)
首先要明白变量初始化的顺序是其声明的顺序,跟初始化列表中的顺序无关。所以变量的初始化顺序为m_nFir(i++),m_nSec(i++),m_nThd(i++),&m_nFor(m_nThd);
i初始值为1,所以经过初始化列表初始化以后m_nFir=1,m_nSec=2,m_nThd=3,m_nFor为m_nThd的一个引用。
并且此时i的值为4,构造函数中执行语句m_nThd=i后,m_nThd=4,m_nFor是它的一个引用,自然值也为4。
输出结果m_nFir+m_nSec+m_nThd+m_nFor=1+2+4+4=11
发表于 2017-05-31 20:36:15 回复(0)
忘了最后一个成员变量是引用,被阴了
发表于 2015-09-14 19:28:31 回复(9)
变量初始化的顺序是其申明的顺序。跟初始化列表中的顺序无关
发表于 2022-03-13 14:27:16 回复(0)
注意m_nFor是引用,m_nThd改变的时候它也变了
发表于 2021-03-18 12:35:16 回复(1)
这个题的赋值是怎么回事鸭
发表于 2021-10-22 18:53:52 回复(0)
++i先加再赋值,i++先赋值再加
发表于 2020-03-02 17:17:18 回复(0)
变量初始化的顺序与初始化 列表的顺序无关,按照变量的声明顺序初始化
发表于 2016-06-03 09:51:39 回复(0)
是按照变量的声明顺序来赋值的
发表于 2022-10-25 12:28:01 回复(0)
但是题目显示多选题啊,选了11,还要另外选一个才能进入下一题
发表于 2024-07-23 22:20:17 回复(0)
虽然但是,初始化列表中的顺序无关。

可这道题也没有考到这个知识点啊,就算误认为second和first这样的顺序初始化的话,结果还是11啊
发表于 2023-12-19 20:02:26 回复(0)
首先,在全局区域声明了一个全局变量 i,初始值为 1。 然后定义了一个类 MyCls,其中包含了一个构造函数和一个成员函数。 在构造函数中,成员变量 m_nFir、m_nSec 和 m_nThd 被依次初始化为 i++、i++ 和 i++,即分别为 1、2 和 3。同时,m_nFor 被初始化为 m_nThd 的引用,也就是说 m_nFor 和 m_nThd 指向同一个地址,其值为 3。 接着在构造函数中,m_nThd 的值被重新赋为 i 的值,即 4。 最后在 main 函数中创建了 MyCls 的对象 oCls,并调用了它的 echo 函数。 在 echo 函数中,输出了 m_nFir、m_nSec、m_nThd 和 m_nFor 四个成员变量的和。它们分别为 1、2、4 和 3,所以输出结果为 10
发表于 2023-11-08 19:00:45 回复(0)
为什么,他写着是多选题答案就一个B呢,那多选的意义何在....
发表于 2023-09-08 09:35:26 回复(0)
为啥fir = 1,他不是m_nfir(i++)吗?为啥不是2
发表于 2023-05-28 11:12:31 回复(1)
纯考眼力
发表于 2022-05-18 23:41:01 回复(0)
变量初始化顺序与其声明顺序有关,与其他无关。
发表于 2020-08-18 15:44:44 回复(0)
注意:m_nFor是m_nThd的引用;
发表于 2020-01-13 18:07:54 回复(0)
懂了
发表于 2019-08-21 16:14:40 回复(0)

赋值顺序为变量定义的顺序,先执行初始化列表再执行构造函数内部

发表于 2019-03-27 13:42:32 回复(0)