程序员面试宝典部分面试题
2013-08-16 22:51
127 查看
第七章面试例题5
输出结果为1
分析:B*pb=(B*)(&a)强制把a地址内容看成是一个B类的对象,pb指向的是a类的内存空间:pb->fun();正常情况下,B类只有一个元素m_c,A类的内存空间中存放第一个元素的位置是m_a,pb指向的是对象的内存首地址,当pb->fun()调用B::fun()来打印m_c时,编译器对m_c对它的认识就是m_c距离对象的偏移量0,于是打印了对象A首地址的编译量的变量值,所以输出为1。
第十一章11.3 面试例题2
下面程序的结果是什么?
在VC++6.0:
sizeof(A):8
sizeof(B):20
sizeof(C):32
在gcc中:
sizeof(A):8
sizeof(B):16
sizeof(C):24
分析:对于class A来说,由于有个虚函数,那么必须有一个对应的虚函数表来记录对应的函数入口地址,所以需要一个虚指针,大小为4,。由于类中有char k[3],数据对齐后大小为4,所以总共大小为8,这在gcc和VC++6.0中是一样的。
对于class B来说,在gcc中:由于它虚继承了A所以要加入一个虚类指针,大小为4,然后继承A类的char k[3]和自己成员char j[3]数据对齐后和为8,外加自己的虚函数指针大小为4,所以总和为16。但是在VC++6.0中:同样有一个虚类指针,大小为4,char j[3]数据对齐后为4,虚函数指针为4,然后加上sizeof(A)=8,所以总和为4+4+4+8=20。实际上比gcc多出的4是多计算了一个A类的虚函数指针,这是VC和gcc的区别所在。
对于class C来说,同理在gcc中:虚继承A虚继承B,两个虚类指针为8,外加三个char型数组为12,虚函数指针4,总共为24。在VC中:虚类指针为4,虚函数指针为4,char i[3]为4,sizeof(B)=20,所以20+4+4+4=32,多计算了A和B两个的虚函数指针。
第十四章14.5面试例题1
求一个字符串中连续出现次数最多的字串,请给出分析和代码。
#include<iostream> using namespace std; class A { public: A(){m_a=1;m_b=2;} ~A(){} private: int m_a; int m_b; }; class B { public: B(){m_c=3;} ~B(){} void fun(){printf("%d\n",m_c);} private: int m_c; }; void main() { A a; B*pb=(B*)(&a); pb->fun(); }
输出结果为1
分析:B*pb=(B*)(&a)强制把a地址内容看成是一个B类的对象,pb指向的是a类的内存空间:pb->fun();正常情况下,B类只有一个元素m_c,A类的内存空间中存放第一个元素的位置是m_a,pb指向的是对象的内存首地址,当pb->fun()调用B::fun()来打印m_c时,编译器对m_c对它的认识就是m_c距离对象的偏移量0,于是打印了对象A首地址的编译量的变量值,所以输出为1。
第十一章11.3 面试例题2
下面程序的结果是什么?
#include<iostream> using namespace std; class A { char k[3]; public: virtual void aa(){} }; class B:public virtual A { char i[3]; public: virtual void bb(){} }; class C:public virtual B { char j[3]; public: virtual void cc(){} }; int main() { cout<<"sizeof(A)"<<sizeof(A)<<endl; cout<<"sizeof(B)"<<sizeof(B)<<endl; cout<<"sizeof(C)"<<sizeof(C)<<endl; return 0; }
在VC++6.0:
sizeof(A):8
sizeof(B):20
sizeof(C):32
在gcc中:
sizeof(A):8
sizeof(B):16
sizeof(C):24
分析:对于class A来说,由于有个虚函数,那么必须有一个对应的虚函数表来记录对应的函数入口地址,所以需要一个虚指针,大小为4,。由于类中有char k[3],数据对齐后大小为4,所以总共大小为8,这在gcc和VC++6.0中是一样的。
对于class B来说,在gcc中:由于它虚继承了A所以要加入一个虚类指针,大小为4,然后继承A类的char k[3]和自己成员char j[3]数据对齐后和为8,外加自己的虚函数指针大小为4,所以总和为16。但是在VC++6.0中:同样有一个虚类指针,大小为4,char j[3]数据对齐后为4,虚函数指针为4,然后加上sizeof(A)=8,所以总和为4+4+4+8=20。实际上比gcc多出的4是多计算了一个A类的虚函数指针,这是VC和gcc的区别所在。
对于class C来说,同理在gcc中:虚继承A虚继承B,两个虚类指针为8,外加三个char型数组为12,虚函数指针4,总共为24。在VC中:虚类指针为4,虚函数指针为4,char i[3]为4,sizeof(B)=20,所以20+4+4+4=32,多计算了A和B两个的虚函数指针。
第十四章14.5面试例题1
求一个字符串中连续出现次数最多的字串,请给出分析和代码。
#include<iostream> #include<string> #include<vector> #include<algorithm> using namespace std; pair<int,string> fun(const string &str) { vector<string> substrs; int maxcount =1,count =1; string substr; int i,len=str.length(); for(i=0;i<len;++i) { substrs.push_back(str.substr(i,len-i)); } copy(substrs.begin(),substrs.end(),ostream_iterator<string>(cout,"\n")); for(i=0;i<len;i++) { for(int j=i+1;j<len;++j) { count=1; if(substrs[i].substr(0,j-i)==substrs[j].substr(0,j-i)) { count++; for(int k=j+(j-i);k<len;k+=(j-i)) { if(substrs[i].substr(0,j-i)==substrs[k].substr(0,j-i)) ++count; else break; } if(count>maxcount) { maxcount = count; substr=substrs[i].substr(0,j-i); //cout<<i<<endl<<j<<endl; } } } } return make_pair(maxcount,substr); } int main() { pair<int,string> rs; string str="abcbcbcabc"; rs=fun(str); cout<<rs.second<<":"<<rs.first<<endl; return 0; }
相关文章推荐
- 华为的JAVA面试题及答案(部分)
- Java 集合框架部分面试题
- 部分面试题
- Android 软件开发面试题 问答部分
- 【数据结构】二叉树部分面试题解法
- 【程序员面试宝典】链表相关面试题
- 2015阿里、百度、360、豌豆荚、搜狗面试题部分集锦
- JAVA基础及语法部分面试题(1)
- 【程序员面试宝典】栈和队列相关面试题
- 重新开始战斗22-程序员面试宝典-P66_7.2面试题3--局部数组和全局数组问题
- php面试题之三——PHP语言基础(基础部分)
- 面试题(来自程序员面试宝典)
- 面试题之父类和子类执行顺序部分
- 微软的部分面试题(附答案)
- 【面试题之算法部分】最长回文子串
- Java面试题1:MVC的各个部分都有那些技术来实现?如何实现
- web面试题-js部分
- php面试题之一——PHP核心技术(高级部分)
- 面试题(有部分答案)
- 面试题收集——Java基础部分(一)