2017昆仑万维技术类基础笔试题
来源:互联网 发布:仓库管理php 编辑:程序博客网 时间:2024/04/25 20:35
1.为了避免头文件重复包含一般采用什么方法?
http://blog.csdn.net/xhfight/article/details/51550446
2.在c++程序中调用被C编译器编译后的函数,为什么要加extern “C”声明?
http://blog.chinaunix.net/uid-23028407-id-1992460.html
3.下面程序运行结果
#include <iostream>#include<string.h>using namespace std;void func(char str[]){cout << sizeof(str) << endl;}typedef union {char a; short b;int c; float d; //4字节 }A;typedef struct {char a;char b;int c;}B;typedef struct {char a;int b; //4字节 char c;}C;int main() {char str[] = "test";cout << sizeof(str) << endl;func(str);cout << sizeof(A) << endl;cout << sizeof(B) << endl;cout << sizeof(C) << endl;}
544812
第一个sizeof是求取内存,包含结束字符\0,所以输出4+1=5
第二个数组作为函数参数传递,退化为指针,32位情况下,指针大小为4
第三个union是取最大的那个内存,float位4个字节
第四个两个char放一个4字节对齐就够了,剩下一个4字节,4+4=8
第五个3个都要分开放了,4+4+4=12,
4.下面程序运行结果
class CTest{public:CTest(const char* str){strcpy(name,str);cout<< "constructor for " << name <<endl; }CTest(const CTest& arg){strcpy(name,arg.name);cout << "copy constructor for " << name <<endl;}~CTest(){cout << "destructor for " << name << endl;}private:char name[20];};CTest foo(CTest arg){ CTest localObject("local"); static CTest staticObject("static"); return localObject; }CTest g_globalobj("global"); //这个应该优先输出来,在主函数之前,调用构造函数,constructor for global int main(){CTest a("a"); //constructor for a CTest* b = new CTest("b"); // 构造函数,constructor for b CTest c = foo(a);//copy constructor for a; 函数参数是类CTest的对象,所以会调用拷贝函数 //constructor for local; //constructor for static;//copy constructor for local; 函数的返回值类型是类CTest的对象,调用拷贝构造函数//destructor for local; 函数调用完成,局部变量析构优先,因为函数参数一般处于函数调用者的栈帧上,//而函数内部的局部变量处在本函数对应的栈帧上,是位于不同的栈上的,//我通过反汇编查看也是发现传入参数和函数内局部变量的栈是不同的,//故函数一结束先清空函数的栈,再清空传入参数的栈。//destructor for a; 析构传入的参数delete b;//destructor for b //最后的a和c对象,根据入栈先后,c后入栈,先析构,而后a析构//destructor for local//destructor for a//destructor for static; 在main结束后,静态对象就析构//destructor for global; 最后函数执行完毕全局对象析构}
constructor for globalconstructor for aconstructor for bcopy constructor for aconstructor for localconstructor for staticcopy constructor for localdestructor for localdestructor for adestructor for bdestructor for localdestructor for adestructor for staticdestructor for global
http://bbs.csdn.net/topics/392034471
5.下面程序运行结果
class CObject{public:CObject(){cout << "CObject::CObject()" << endl;}virtual ~CObject(){cout << "CObject::~CObject" << endl;}virtual void Serialize(){cout << "CObject::Serialize()" <<endl;}};class CDocument:public CObject{public:int m_data1;CDocument(){cout << "CDocument::CDocument()" << endl;}~CDocument(){cout << "CDocument::~CDocument()" << endl;}void func(){cout << "CDocument::func()" << endl;Serialize();}void Serialize(){cout << "CDocument::Serialize()" << endl;}};class CMyDoc:public CDocument{public:int m_data2;CMyDoc(){cout<< "CMyDoc::CMyDoc()" << endl;}~CMyDoc(){cout<< "CMyDoc::~CMyDoc()" << endl;}void Serialize(){ //这个函数隐藏了父类的函数,//所以执行的都是这个,隐藏:分参数同和不同,不同:不管有无virtual,都被隐藏;//相同,没有virtual,也被隐藏;有的话退化为重写了(只是他返回值没有管和重载一样)cout << "CMyDoc::Serilize()" << endl;}};void main(){cout << "11111111111111111" <<endl;CDocument* pDoc = new CMyDoc; //基类依次构造,最后是派生类cout << "22222222222222222222" <<endl;pDoc->func();cout << "33333333333333333333" <<endl;delete pDoc;cout << "444444444444444444444" <<endl;CMyDoc mydoc;cout << "55555555555555555555555" <<endl;mydoc.func();cout << "66666666666666666666666" <<endl;((CDocument*)(&mydoc))->func();}
11111111111111111CObject::CObject()CDocument::CDocument()CMyDoc::CMyDoc()22222222222222222222CDocument::func()CMyDoc::Serilize()33333333333333333333CMyDoc::~CMyDoc()CDocument::~CDocument()CObject::~CObject444444444444444444444CObject::CObject()CDocument::CDocument()CMyDoc::CMyDoc()55555555555555555555555CDocument::func()CMyDoc::Serilize()66666666666666666666666CDocument::func()CMyDoc::Serilize()CMyDoc::~CMyDoc()CDocument::~CDocument()CObject::~CObject
主要考察了:
1.派生类对象的构造顺序,先调用最顶层的基类默认构造函数,最后才到自己
2.析构的顺序,先析构派生类的,最后是基类的
3.函数重载,重写,和重定义的区别的利用,这里主要考察了重定义这个用法,调用的是派生类的函数
6.单链表的翻转;链表排序?(忘了)
主要代码如下:
pNode = pHead;pPre = NULL;while (pNode != NULL){pNext = pNode->next;pNode->next = pPre;pPre = pNode;pNode = pNext;}解析:
让当前节点的指向下一个节点存储上前一个,这样就翻转过来了
pNext是为了移位时候,顺利保存下一个节点指针用的
0 0
- 2017昆仑万维技术类基础笔试题
- 阿里技术类笔试题
- 智力类笔试题基础
- 技术类面试、笔试题汇总
- net技术类面试、笔试题汇总
- 淘宝技术类2011年校招笔试题
- 百度技术类笔试题经验
- 人人网笔试题(技术类)
- 淘宝技术类2011年校招笔试题
- 广州百田 技术类 笔试题
- 新浪技术笔试题
- 研发类笔试题基础(第一篇
- 智力类笔试题基础(第一篇
- 智力类笔试题基础(图形1
- iOS基础笔试题
- linux 基础笔试题
- J2EE基础笔试题
- java基础笔试题
- 从新拾起,继续起航<一>
- 通过Timer和Handler(os)结合实现线程改变IU主界面数据
- 消息称腾讯获35亿美元银行贷款 资助Supercell交易
- 几种常见的sql函数
- 数据存储全方案,详解持久化技术
- 2017昆仑万维技术类基础笔试题
- Mac获取文件路径
- Salesforce CEO:不会对Twitter发起收购
- Java堆和栈的区别(JVM运行时数据区域)
- 美议员要求司法部等机构就雅虎电邮扫描计划作出解释
- Java从键盘中读取一串数字存入数组,并返回元素组成的最大数
- android 沉浸式状态栏
- 白宫开发Facebook机器人代理奥巴马与民众聊天:已开源
- 我所理解的离散傅里叶变换_DFT