一个c++题目

来源:互联网 发布:android 播放网络视频 编辑:程序博客网 时间:2024/05/16 14:41

被人问了c++的一个题目,简直长知识哇

#include<iostream>using namespace std;int i = 1;class MyCls{public:MyCls():m_nFor(m_nThd),m_nSec(i++),m_nFri(i++),m_nThd(i++){m_nThd = i;}void echo(){    cout << "result:"<<m_nFri+m_nSec+m_nThd+m_nFor<<endl;    cout << "fri:"<<m_nFri<<endl;    cout << "sec:"<<m_nSec<<endl;    cout << "thd:"<<m_nThd<<endl;    cout << "for:"<<m_nFor<<endl;}private:int m_nFri;int m_nSec;int m_nThd;int &m_nFor;};int main(){    MyCls ocls;    ocls.echo();    return 0;}

结果是什么,翻了翻c++ primer

简直涨姿势啊

下面是解析:

 MyCls():m_nFor(m_nThd),m_nSec(i++),m_nFri(i++),m_nThd(i++){
m_nThd = i;
}
这个是构造函数,括号里面是他们的初值,然后初始化的顺序是根据定义的次序也就是
private:
int m_nFri;
int m_nSec;
int m_nThd;
int &m_nFor;
所以 m_nFri最先初始化为1,m_nFri(i++),然后这是i=2
初始化m_nSec,m_nSec(i++),结果为2,这是i=3
然后m_nThd(i++),这是m_nThd为3,i为4,
然后m_nFor(m_nThd),m_nFor是个引用,就是他始终指向m_nThd
好了最后执行括号里的赋值语句m_nThd = i;
所以m_nThd = m_nFor = 4
结果为1+2+4+4 =11
真是长知识  

另外知识点:

必须使用构造函数初始化列表

1.没有默认构造函数的类类型成员

2.const或引用类型成员

1 0
原创粉丝点击