一个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
真是长知识
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
- 一个C 题目
- 一个c语言题目
- c 的一个简单题目
- 一个简单的c语言题目
- 一个简单的C语言题目
- 一个题目
- 一个题目
- C语言解惑上面一个数组指针题目分析
- c语言题目----请编写一个小型学生管理系统
- C题目
- C题目
- C 题目
- c 题目
- C题目
- C++/C题目
- 4.1题目: 请编写一个C函数,该函数将一个字符串逆序
- 逻辑测试题目一个
- 一个上机题目
- 第六章 模型与数据库
- vs2010
- 关于Windows Mobile连接不上电脑的问题的解决方法
- Android的Activity屏幕切换动画(二)-左右滑动深入与实战
- PAT 1089. Insert or Merge (25)
- 一个c++题目
- 来自github的ring buffer源代码
- Dapper ORM 用法—Net下无敌的ORM(转)
- 《第一行代码》读书笔记(七)----持久化(下)
- CentOS7通过yum命令安装Mono
- 4种必须知道的Android屏幕自适应解决方案
- Java获取客户端真实IP地址的两种方法
- 自反ACL实验
- java AtomicReference类