搜狗C++笔试

int func(){char b[2] = {0};strcpy(b,"aaaa");}

以下说法哪个正确:

A Debug版崩溃,Release版正常

B Debug版正常,Release版崩溃

C Debug版崩溃,Release版崩溃

D Debug版正常,Release版正常

选A。因为在Debug中有ASSERT断言保护,所以要崩溃,而在Release中就会删掉ASSERT,所以会出现正常运行。但是不推荐如此做,因为这样会覆盖不属于自己的内存,这是搭上了程序崩溃的列车

class A

{

public:

virtual void foo(){}

};

class B

{

public:

virtual void foo(){}

};

class C : public A,public B

{

public:

virtual void foo(){}

};

void bar1(A* pa)

{

B* pc = dynamic_cast<B*>(pa);

}

void bar2(A* pa)

{

B* pc = static_cast<B*>(pa);

}

void bar3()

{

C c;

A* pa = &c;

B* pb = static_cast<B*>(static_cast<C*>(pa));

}

A bar1无法通过编译                B bar2无法通过编译

C bar3无法通过编译                D bar1可以正确运行,但是采用了错误的cast方法

选B。dynamic_cast是在运行时遍历继承树,所以,在编译时不会报错。但是因为A和B没啥关系,所以运行时报错,动态的,所以运行时转换(所以A和D都是错误的)。static_cast:静态的,编译时转换,编译器隐式执行的任何类型转换都可由它显示完成,如果两个类无关,则会出错(所以B正确),如果存在继承关系,则可以在基类和派生类之间进行任何转型,在编译期间不会出错。所以bar3可以通过编译(C选项是错误的)。

第十二题:下列哪些template实例化使用,会引起编译错误?

template
class stack;

void fi(stack); //A

class Ex
{
 stack& rs; //B

stack si; //C
};

int main()
{
 stack* sc; //D
 fi(*sc);   //E
 int i = sizeof(stack); //F

return 0;
}

选C E F;  请注意stack和fi都只是声明不是定义。我还以为在此处申明后,会在其他地方定义呢,坑爹啊。

由于stack只是声明,所以C是错误的,stack不能定义对象。E也是一样,stack只是申明,所以不能执行拷贝构造函数,至于F,由于stack只是声明,不知道stack的大小,所以错误。如果stack定义了,将全是正确的。

#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
class A
{
public:
string a;
void f1(){printf("Hello World");}
void f2(){a = "Hello World"; printf("%s",a.c_str());}
virtual void f3(){printf("Hello World");}
virtual void f4(){a = "Hello World";printf("%s",a.c_str());}

static int i;
static void f5(){cout<<i<<endl;}
};
void main()
{
A* aptr = NULL;aptr->f1();
A* aptr = NULL;aptr->f2();
A* aptr = NULL;aptr->f3();
A* aptr = NULL;aptr->f4();
}

在Class A中没有写public,所以全是private,以至于f1,f2,f3,f4都将失败。如果改成PUBLIC那么:只有A正确,因为A没有使用任何成员变量,而成员函数是不属于对象的,所以A正确。其实,A* aptr = NULL;aptr->f5();也是正确的,因为静态成员也是不属于任何对象的。至于BCD,在B中使用了成员变量,而成员变量只能存在于对象,C有虚表指针,所以也只存在于对象中。D就更是一样了

在Inter CPU上,以下多线程对int型变量x的操作,哪几个不是原子操作,假定变量的地址都是对齐的。

A x = y               B x++             C ++x            D x=1

只有D选项才是原子操作

第八题:关于C++标准模板库,下列说法错误的有哪些:

A std::auto_ptr类型的对象,可以放到std::vector >容器中;

B std::shared_ptr类型的对象,可以放到std::vector >容器中;

C 对于复杂类型T的对象tObj,++tObj和tObj++的执行效率相比,前者更高

D 采用new操作符创建对象时,如果没有足够的内存空间而导致创建失败,则new操作符会返回NULL。

选择:A,D。A中auto是给别人东西而自己没有了(auto_ptr与boost库中的share_ptr不同的,auto_ptr没有考虑引用计数,因此一个对象只能由一个auto_ptr所拥有,在给其他auto_ptr赋值的时候,会转移这种拥有关系。)。所以不符合vector的要求。而B可以。C不解释。D选项在谭浩强的C++程序设计上说是正确的(谭浩强写书时可能是正确的,那时C++的新标准还没出来),但是实际上市错误的。因为:new操作符有三种,(1)plain new/delete就是operator new/delete。这种在为标准化时,C++中的new运算符总是返回NULL表示分配失败,就像malloc一样,因此程序员不得不检查其返回值。标准C++修订了new的语义,plain new在失败后抛出标准异常std::bad_alloc而不是返回NULL。然而,现在很多使用C++的程序员还以为new是以前的老样子,于是通过检查其返回值是否为NULL来判断分配成功与否,显然这是徒劳的;(2) nothrow new就是不抛出异常的运算符new的形式,nothrow new在失败时返回NULL,所以使用它就不需要设置异常处理器。而是像过去一样检查返回值是否为NULL即可。(3)placement new/delete:在指定的内存地址调用构造函数和析构函数,不会引起内存的分配。

#include<iostream>
#include<stdio.h>
using namespace std;
class A
{
public:
void foo(){}
};

class B:virtual public A
{
public:
void foo(){}
};

class C:virtual public A
{
public:
void foo(){}
};

class D: public B,public C
{
public:
void foo(){}
};

int main(int argc, char *argv[])
{
cout<<"A 的大小为: "<<sizeof(A)<<endl;
cout<<"B 的大小为: "<<sizeof(B)<<endl;
cout<<"C 的大小为: "<<sizeof(C)<<endl;
cout<<"D 的大小为: "<<sizeof(D)<<endl;
return 0;
}

输出1,4,4,8,空类只有一个字节,每一次虚继承都要保存一个基类的虚表地址

class A
{
public:
 int b;
 char c;
 virtual void print()
 {cout<<"this is a father‘s function!"<<endl;}
};

class B :public A
{
public:
 virtual void print()
 {cout<<"this is a children‘s function!"<<endl;}
};
int main()
{
 cout<<sizeof(A)<<"  "<<sizeof(B)<<endl;

return 0;
}

输出为12,12.如果把char c去掉,那么输出8,8,因为char由于字节对齐,所以原题需要12个字节。

子类继承父类的虚表并覆盖其中的条目。而且指向虚表的指针在每个类中也只有一个,如果子类是虚继承父类class B :virtual public A,那么子类比父类多4个字节

#include
using namespace std;

int main()
{
 http://www.sogou.com
 cout<<"welcome to sogou"<<endl;

return 0;
}

A:编译时;B:运行时;C:编译和运行时都出错;D程序运行正常

选D。因为http://www.sogou.com中//后面是注释,前面是标签(类似goto的标签)

时间: 2024-10-08 22:13:29

搜狗C++笔试的相关文章

搜狗笔试的思考

一:感悟 (1)对一任何一家IT公司的笔试题,综合性还是比较强的,需要做好充分的准备,请问你准备好了吗? (2)一定要养成手写代码的习惯,剑指offer的至少要手写代码3遍吧,算法分析题,一定要自己模拟一遍,养成自己的一种模拟习惯,这样便于记住. (3)一定要精通一门语言的基础知识,一定一定要知道它的基础细节. 二:笔试题目 (1)指针题目 #include <stdio.h> int getNum(char parr[]) { return sizeof(parr); } int main(

BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇

BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇 2014/08/03 · Web前端, 开发 · CSS, HTML, 技术面试 分享到: 188 MongoDB集群之分片技术应用 Hello,移动WEB Linux权限管理之特殊权限 Android高级特效-索引 原文出处: Ico_Coco 的博客(@CHoK__Coco_mAm)   欢迎分享原创到伯乐头条 很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习

面试题2:BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇

BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇 Html篇: 1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? IE: trident内核 Firefox:gecko内核 Safari:webkit内核 Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核 Chrome:Blink(基于webkit,Google与Opera Software共同开发) 2.每个HTML文件里开头都有个很重要的东西,Doctype,知道这

BAT及各大互联网公司2014前端笔试面试题--Html,Css篇

很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习前端基础更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正确,如有错误或有更好的解法,还请斧正. 前面几题是会很基础,越下越有深度. 附上第一篇:BAT及各大互联网公司2014前端笔试面试题--JavaScript篇 Html篇: 1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? IE: trident内核 Firefox:gecko内核 S

(转)BAT及各大互联网公司2014前端笔试面试题--Html,Css篇

BAT及各大互联网公司2014前端笔试面试题--Html,Css篇 很多面试题是我自己面试BAT亲身经历碰到的.整理分享出来希望更多的前端er共同进步吧,不仅适用于求职者,对于巩固复习前端基础更是大有裨益. 而更多的题目是我一路以来收集的,也有往年的,答案不确保一定正确,如有错误或有更好的解法,还请斧正. 前面几题是会很基础,越下越有深度. 附上第一篇:BAT及各大互联网公司2014前端笔试面试题--JavaScript篇 Html篇: 1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什

前端笔试总结

一.HTML和CSS 1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? IE: trident内核 Firefox:gecko内核 Safari:webkit内核 Opera:以前是presto内核,Opera现已改用Google Chrome的Blink内核 Chrome:Blink(基于webkit,Google与Opera Software共同开发) 2.每个HTML文件里开头都有个很重要的东西,Doctype,知道这是干什么的吗? <!DOCTYPE> 声明位于文档中的最

DP - tencent2016实习生笔试A

tencent2016实习生笔试A Problem's Link ---------------------------------------------------------------------------- Mean: 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串.如何删除才能使得回文串最长呢?输出需要删除的字符个数. analyse: 对于这题来说,插入字符和删除字符使其成为回文串,答案是一样的. 首先求s的反串rs,然后对s和rs求最长公共子序列,要删除的字

算法学习 并查集(笔试题目:找同伙)

题目背景太长,记得不清楚,暂参考<啊哈算法>一书,根据笔试题目大意改编如下: 警察正要捉获某地区的犯罪团伙,由于强盗人数过大,想查清楚有几个团伙非常困难. 根据上级指示,需要首先尽快抓获强盗A所在的团伙,这需要掌握 1 所在团伙的人数.先有资料如下: 强盗1 和 强盗2 是同伙 强盗3 和 强盗4 是同伙 强盗2 和 强盗5 是同伙 强盗3 和 强盗2 是同伙 注意,强盗的同伙的同伙也是同伙,问  强盗1 的同伙(不包括1自己)有多少人? 该题形式化表示如下: 每个测试实例首先包括2个整数:N

2015腾讯笔试大题

今天做完腾讯的在线笔试,感觉自己弱爆了,选择题部分考得比较基础,但是考的面比较广,数据结构,计算机网络,算法常识,概率题,C,C++,都有.大题如下: 在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code).请编写一个函数,使用递归方法生成N位的格雷码,并且保证这个函数的健壮性. 2. 有下图的题解,请用C/C++代码来列出满足下图0-100内的所有答案. 3. 如图所示,系统中有三个进程Producer,Transmitter和Consumer.