2011百度校园招聘笔试题 C++类-附原创答案
最近在看各个公司的笔试面试题,这份题是百度11年的笔试题,答案是自己做的,也许有考虑不周的地方,欢迎各位
朋友指正。
一、选择题
1.下列关于对象初始化的叙述中,正确的是
A 定义对象的时候不能对对象进行初始化
B 定义对象之后可以显式地调用构造函数进行初始化
C 定义对象时将自动调用构造函数进行初始化
D 在一个类中必须显式地定义构造函数实现初始化
答案:C. (对象在定义时会自动调用构造函数进行初始化)
2.下列关于基类和派生类关系的叙述中,正确的是
答案:D.
3.下列关于赋值运算符“=”重载的叙述中,正确的是
A 赋值运算符只能作为类的成员函数重载
B 默认的赋值运算符实现了“深层复制”功能
C 重载的赋值运算符函数有两个本类对象作为形参
D 如果己经定义了复制(拷贝) 构造函数,就不能重载赋值运算符
答案:A
4.下列选项中,正确的C++标识符是
A 6_group B group~6 C age+3 D _group_6
答案:D
5. 下列循环语句中有语法错误的是
A int i;for( i=1;i<10;i++)cout<<‘*‘;
B int i,j;for(i=1,j=0;i<10;i++,j++)cout<<‘*‘;
C int i=0;for(;i<10;i++)cout<<‘*‘;
D for(1)cout<<‘*‘;
答案:D. 其他三个都能正常运行
6. 下列定义语句中,错误的是
A int px*; B char *acp[10];C char(*pac)[10]; D int(*p)();
7. 若MyClass为一个类,执行“MyClass a[4],*p[5];”语句时会自动调用该类构造函数的次数是
#include <iostream>
using namespace std;
class myClass{
public:
myClass(){
cout<<"constructor called..."<<endl;
}
};
int main(){
myClass a[4],*p[5];
cout<<sizeof(a)/sizeof(myClass)<<endl;
cout<<sizeof(p)/sizeof(myClass)<<endl;
cout<<sizeof(*p)/sizeof(myClass)<<endl;
system("pause");
return 0;
}
输出:
classPoint{
friend double distance(const Point &p); //p距原点的距离
private:
double distance(const Point &p) { //②
int main(){
1.const int *a =&b; 2.const * int a = &b;
3. const int*const a = &b; 4.int const* const a = &b;
答案:3和4相同。 1定义一个指针a,它指向一个整型的不变量,即不能通过a来修改b的值(但b的值是可以修改的)A"I love this game"B "I love thi" C"I love" D "I"
答案:D. str的地址是数组的首地址,也就是str[0],故字符串中只有一个字符I
11. 有函数模板声明和一些变量定义如下:
template<class Tl,class T2,class T3>T1 sum(T2,T3);
double dl,d2;
则下列调用中,错误的是
A sum<double,double,double>(dl,d2); B sum<double;double>(d1,d2);
C sum<double>(d1,d2); D sum(d1,d2);
答案:D. D会导致编译错误,因为编译器无法去匹配参数列表
12. 以下程序段完全正确的是
A int*p; scanf("%d",&p); B int *p; scanf(“%d”,p);
C int k,*p=&k; scanf("%d",p); D int k,*p:; *p= &k; scanf(“%d”,p);
答案:A,C. A项编译能通过,也能运行,定义了一个指针p,并给这个指针赋值(输入的是地址)
B项中指针p的值没有定义,此时它没有指向任何内存地址,故通过它来给对应的内存地址输入
变量是错误的。C正确,通过p来给k赋值。D编译不过,语句*p=&k错误
21. 如果进栈序列为el,e2,e3,e4,则可能的出栈序列是 ( )
2。 不涉及(形式上,函数体,参数表内没出现)模板参数T的也是个函数模板;
角度一:成员函数的类型中包含一个属性“属于什么类”,所以void A<T>::fun(){};这是就和T建立了联系,这时就能说明即使函数体内不涉及T类型,它也是个函数模板,因为由不同T类型,是不同的函数类型(因为域概念是成员函数类型的一部分)
A 公有类型 B私有类型 C 保护类型 D友元类型
答案:D25.抽象基类是指( )
27. 以下说法正确的是( )。
class A{
public:
void f(){
cout<<"A::f().."<<endl;
}
};
class B{
public:
void f(){
cout<<"B::f().."<<endl;
}
void g(){
cout<<"B::g().."<<endl;
}
};
class C:public A,public B{
public :
void g(){
cout<<"C::g().."<<endl;
}
void h(){
cout<<"C::h().."<<endl;
f();// 语句1
}
};
int main(){
C obj;
obj.f();//语句2
obj.A::f();//语句3
obj.B::f();//语句4
obj.g(); //语句5
system("pause");
return 0;
}
void Test(void){
char *str = (char *) malloc(100);
strcpy(str,"hello");
// cout<<str<<" "<<*str<<endl;
free(str);
if(str!= NULL){
strcpy(str,"world");
printf(str);
}
}
分析:程序会崩溃。因为free函数释放了str所指的内存,但指针值此时不为NULL,故if块中的语句会执行,导致试图将对一块儿不合法的内存写入数据。所以一般调用完free函数释放完空间后应将指针显示赋值为NULL
2.写出程序的运行结果
#include <iostream>
using namespace std;
class Base{
int x;
public:
Base(int b):x(b){}
virtual void display(){
cout<<x<<endl;
}
};
class Derived:public Base{
int y;
public:
Derived(int d):Base(d),y(d){}
void display(){
cout<<y<<endl;
}
};
int main(){
//Test();
Base b(1);
Derived d(2);
b.display();
d.display();
Base *p=&d;
p->display();
//Base *q=new Derived;
system("pause");
return 0;
}
程序输出:
1
2
2
3.下面的函数实现在一个固定的数上加上一个数,有什么错误,改正
int add_n(int n) { static int i=100; i+=n; return i;}
分析:题目的意思有点儿不太明了,固定的数是指每次都给100上加一个指定的值吗?这样的话要去掉
static关键字。
4.i最后等于多少?
int i = 1;
int j = i++;
if((i>j++) && (i++ == j)) i+=j;
分析:i为5,j为2 。
5.
#include <iostream>
constint SIZE=10;
class stack{
char stck[SIZE];
int top;
public:
void init();
void push(char ch){
char pop();
};
void stack::init()
{ top=0; }
void stack:push(char ch){
if(top==SIZE){
cout<<”Stack is full.\n”;
return ;
}
stck[top++]=ch;
}
if(top==0){
cout<<”Stack is empty.\n”;
return 0;
}
return stck[--top];
}
void main(){
stack s1, s2;
s1.init();
s2.init();
s1.push(‘a’);
s1.push(‘b’);
s1.push(‘c’);
s2.push(‘x’);
s2.push(‘y’);
s2.push(‘z’);
for(int i=0; i<3; i++) cout<<”Pop s1:”<< s1.pop();
for(i=0; i<3; i++) cout<<”Pop s2:”<< s2.pop();
}
分析:输出cbazyx
四.附加题
写一个Singleton。Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在。
C++代码:
class Singleton{
private:
static Singleton *instance;
Singleton(){cout<<"Singleton example";}
public:
static Singleton* getSingleton(){
if(instance==NULL){
instance=new Singleton();
}
return instance;
}
};
Singleton * Singleton::instance=NULL;
注意两点:
1.构造函数为私有,防止直接实例化。
2.指针为静态变量