最近在看各個公司的筆試面試題,這份題是百度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.指針為靜態變量
