最近在看各个公司的笔试面试题,这份题是百度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];”语句时会自动调用该类构造函数的次数是
#includeusing namespace std;class myClass{public: myClass(){ cout<<"constructor called..."<
输出:
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,则可能的出栈序列是 ( )
A 公有类型 B私有类型 C 保护类型 D友元类型
答案:D25.抽象基类是指( )
27. 以下说法正确的是( )。
class A{public: void f(){ cout<<"A::f().."<
void Test(void){ char *str = (char *) malloc(100); strcpy(str,"hello"); // cout<<<" "<<*str<
分析:程序会崩溃。因为free函数释放了str所指的内存,但指针值此时不为NULL,故if块中的语句会执行,导致试图将对一块儿不合法的内存写入数据。所以一般调用完free函数释放完空间后应将指针显示赋值为NULL
2.写出程序的运行结果
#includeusing namespace std;class Base{ int x;public: Base(int b):x(b){} virtual void display(){ cout< < 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.指针为静态变量