c++考題1

**一、選擇題(每題
1分,共計27x1'=27分)**

1.下列關于類和對象的敘述中,錯誤的是
(  )
  A.一個類只能有一個對象
 
  B.對象是類的具體實例
 
  C.類是對某一類對象的抽象
 
  D.類和對象的關系是一種數據類型與變量的關系
 
 2.當將一個類A或函數f()說明為另一個類B的友元后,類A或函數f()能夠直接訪問類B的(  )。
  A.只能是公有成員
 
  B.只能是保護成員
 
  C.只能是除私有成員之外的任何成員
 
  D.任何權限的成員
 
 3.類中定義的成員默認為(  )訪問屬性。
  A.public   B.private   C.protected   D.friend  

4.一個類的友元不是該類的成員,與該類的關系密切,所以它(  )。
 A.有this指針,有默認操作的對象
 
  B.沒有this指針,可以有默認操作的對象
 
  C.有this指針,不能執行默認操作
 
  D.沒有this指針,也就沒有默認操作的對象
 
 5.假定AA為一個類,a為該類私有的數據成員,GetValue( )為該類公有函數成員,它返回a的值,x為該類的一個對象,則訪問x對象中數據成員a的格式為( )。
 A.x.a   B.x.a()   C.x->GetValue()   D.x.GetValue() 

 6.對于任一個類,用戶所能定義的構造函數的個數至多為(  )
。
  A.0   B.1   C.2   D.任意個
 
 7.一個類的析構函數通常被定義為該類的(  )成員。
   A.私有
 
  B.保護
 
  C.公用
 
  D.友元
 
 8.有如下類聲明:class Foo{int bar;};則Foo類的成員bar是 (  )
 A.公有數據成員
 
  B.公有成員函數
 
  C.私有數據成員
 
  D.私有成員函數
 
 9.關于封裝,下列說法中不正確的是(  )。
  A.通過封裝,對象的全部屬性和操作結合在一起,形成一個整體
 
  B.通過封裝,一個對象的實現細節被盡可能地隱藏起來(不可見)
 
  C.通過封裝,每個對象都成為相對獨立的實體
 
  D.通過封裝,對象的屬性都是不可見的
 
 10.假定AB為一個類,則執行 “AB *s=new AB(a,5);”語句時得到的一個動態對象為(  )。  A.s   B.s->a   C.s.a   D.*s  11.對于一個類的構造函數,其函數名與類名(  )。
 A.完全相同
 
  B.基本相同
 
  C.不相同
 
  D.無關系
 
 12.在一個類的定義中,包含有(  )成員的定義。
 A.數據
 
  B.函數
 
  C.數據和函數
 
  D.數據或函數
 
 13.假定AB為一個類,則執行AB x;語句時將自動調用該類的(  )。
 A.有參構造函數
 
  B.無參構造函數
 
  C.拷貝構造函數
 
  D.賦值構造函數
 
 14.若類X是類Y的友元類,則下列哪種訪問關系是正確的
A.類X的成員不能訪問類Y的私有成員

B.類X的成員可以訪問類Y的私有成員

C.類Y的成員可以訪類X的私有成員
 
D.只有類Y的公共成員才能訪問類X的私有成員
 
 15.假定AB為一個類,則執行 “AB a, b(3), *p;”語句時共調用該類構造函數的次數為(  )。
  A.2   B.3   C.4   D.5  

16.在C++中,當一個對象被創建后,它的每一個成員函數都含有一個系統自動生成的隱含的指針,稱之為(  )指針。(2分)
  A.對象
 
  B.派生
 
  C.基類
 
  D.this 
 17.靜態數據成員的初始化是在(  )中進行的。
   A.構造函數
 
  B.任何成員函數
 
  C.所屬類
 
  D.類體外
 
 18.對于公有繼承,基類中的私有成員在派生類中將(  )。
  A.能夠直接使用成員名訪問
 
  B.能夠通過成員運算符訪問
 
  C.仍然是基類的私有成員
 
  D.變為派生類的私有成員
 
 19.建立包含有類對象成員的派生類對象時,自動調用構造函數的執行順依次為(  )的構造函數。
 A.自己所屬類、對象成員所屬類、基類
 
  B.對象成員所屬類、基類、自己所屬類
 
  C.基類、對象成員所屬類、自己所屬類
 
  D.基類、自己所屬類、對象成員所屬類
 
 20.派生類的成員函數可以直接訪問基類的()成員。
  A.所有
 
  B.公有和保護
 
  C.保護和私有
 
  D.私有
 
 21.在c++中,一個虛函數是通過關鍵字(  )放在其基類說明的前面來加以說明的
.
  A.virtual   B.protected   C.operator   D.this 

 22.在C++中,對于基類的protected成員,當以protected方式派生一個新類時。該成員將成為派生類的(  )成員.
 A.private   B.protected   C.public   D.非法
 
 23.面向對象方法的多態性是指()。
   A.一個類可以派生出多個特殊類
 
  B.一個對象在不同的運行環境中可以有不同的變體
 
  C.針對一消息,不同的對象可以以適合自身的方式加以響應
 
  D.一個對象可以是由多個其他對象組合而成的
 
 24.抽象類是()
 A.不可以定義對象
 
  B.可以定義對象
 
  C.不可以派生新類
 
  D.不可以輸出
 
 25.假定k是一個double類型的變量,則關于變量p的正確定義語句為(  )。
  A.double p=&k;   B.int *p=&k;   C.double *p=&k;   D.char *p=”Thank you!”;
  
26.若有定義:int aa[8];則以下表達式中不能代表數組元素aa[1]的地址的是(  )。
  A.&aa[0]+1   B.&aa[1]   C.&aa[0]++   D.aa+1 

 27.假定指針變量p定義為“int *p=new int;”,要釋放p所指向的動態內存,應使用語句(  )。
   A.delete p;   B.delete *p;   C.delete &p;   D.delete []p; 

 ** 二.判斷(每題2分,共計12x2'=24分
)******
1.域運算符(::)描述的是類和成員之間的關系。

2.靜態成員函數只能訪問靜態成員變量。

3.構造函數和析構函數都可以重載。

4.在公有繼承中,基類中的公有成員和私有成員在派生類中都是可見的。

5. 抽象類不可以繼承,只能派生
6. 類的私有成員只能被類中的成員函數訪問,任何類以外的函數對它們的訪問都是非法的。
7. 友元函數的聲明不受訪問區域的影響。
8. 子類可以繼承父類的所有成員。
9. 使用new申請的內存,在程序執行結束時,必須使用delete釋放。
10. 類A是類B的友元,則類B一定是類A的友元。
11. 靜態成員變量每個對象都有一份拷貝。
12. 子類可以改造從父類繼承的成員。**

三、問答題(每題3分,共計6x3'=18分)
1. 什么是“引用”?申明和使用“引用”要注意哪些問題?將“引用”作為函數參數有哪些特點?

2、C++中的繼承有幾種形式? 各種方式中的派生類對基類成員的訪問規則有什
 
3、舉一個多態的例子,并以C++的格式給于定義和實現。

4、派生類的構造函數和父類構造函數的執行順序?

5、什么是虛基類?他的作用是什么?

6、解釋:深拷貝,淺拷貝。

**四、看程序(每題1.5分,共計2x1.5'=3分)**題
1.分析以下程序的執行結果
 #include<iostream.h> 
class Sample
 {    
      int A[10][10];   
public:
      int &operator()(int,int); 
};
int &Sample::operator()(int x,int y) 
{     
      return A[x][y]; 
} 
void main() 
{ 
    Sample a;
    int i,j;
    for(i=0;i<10;i++)
    for(j=0;j<10;j++)
    a(i,j)=i+j;
    for(i=0;i<10;i++) 
    cout<<a(i,1)<<" ";
    cout<<endl;
 } 

題2. 回答問題:①該程序執行后的輸出結果是什么?為什么? 

#include 
class A 
{
public: 
    virtual void act1(); 
    void act2() 
  {
      act1(); 
  }
}; 
void A::act1() 
{
     cout”A::act1() called。” 
}
class B:public A 
{
public: 
void act1(); 
}
void B::act1() 
{
cout”B::act1() called。” 
}
void main() 
{
B b; 
b.act2(); 
}


《嵌入式C++高級編程》****機試試卷
一、已知
String類定義如下:(10分)
class String
{
public:
String(const char *str = NULL);             //通用構造函數
String(const String &another);          //拷貝構造函數
~ String();                             //析構函數
String & operater =(const String &rhs);     //賦值函數
private:
char *m_data; //用于保存字符串
};
寫出類的成員函數的具體功能實現代碼。

二、在Time類中設計如下重載運算符函數:時間:小時、分、秒 
實現加法、減法、前++、后++重載。**(10分)** 

三、使用文件相關的類,實現圖片或mp3等文件的復制。**(8分)**
例如:./copyfile  a.mp3   b.mp3
 a.mp3是已經存在的mp3音頻文件
,b.mp3是從a.mp3音頻文件復制之后得到的新文件。

答案

C++考試題4_參考答案
一,選擇
1. D    2. D    3. B    4. D    5. D    6. D    7. C    8. C    9. B    10. D

11. A   12. C   13. B   14. B   15. A   16. D   17. D   18. C   19. C   20. B

21. A   22. B   23. C   24. A   25. C   26. C   27. A

二,判斷  2,7,9,12  T
1. F    2. T    3. F    4. F    5. F    6. F    7. T    8. F    9. T    10. F
11. F   12. T

三,問答
 1. C++中引用和指針的區別?
  引用是對象的別名, 操作引用就是操作這個對象, 必須在創建的同時有效得初始化(引用一個有效的對象, 不可為NULL), 初始化完畢就再也不可改變, 引用具有指針的效率, 又具有變量使用的方便性和直觀性, 在語言層面上引用和對象的用法一樣, 在二進制層面上引用一般都是通過指針來實現的, 只是編譯器幫我們完成了轉換。 之所以使用引用是為了用適當的工具做恰如其分的事, 體現了最小特權原則。
2、C++中的繼承有幾種形式? 各種方式中的派生類對基類成員的訪問規則有什 
派生繼承,虛擬繼承,多重繼承
有三種形式:
        方式              public          protected       private
        1,Public        public          protected       private
        2,Protected     protected       protected       private
        3,Private       private         private         private

3、在C++程序中調用被C 編譯器編譯后的函數,為什么要加extern “C”?
首先,作為extern是C/C++語言中表明函數和全局變量作用范圍(可見性)的關鍵字,該關鍵字告訴編譯器,其聲明的函數和變量可以在本模塊或其它模塊中使用。   在c++的環境下使用c 的函數時,通常會出現編譯器無法找到 obj 模塊中的c 函數定義的問題,從而導致鏈接失敗。這時因為在c++ 中支持函數重載,編譯時會將函數名和參數列表連接起來,而c 語言不會,因此會造成鏈接失敗的情況,此時 c 函數就需要使用extern “C “ 來進行鏈接指定。


4、派生類的構造函數和父類構造函數的執行順序?
順序如下:
1,      虛基類構造函數
2,      非虛基類構造函數
3,      組合對象構造函數
4,      本身構造函數

5、什么是虛基類?他的作用是什么?
當繼承時,加上virtual關鍵字,就是所謂的虛擬繼承,該基類就是虛基類;
作用:當繼承重復時,會出現繼承模糊的問題,虛擬繼承會解決這個問題,即沒有繼承的時候繼承,如果繼承了則不需要再重復繼承。

6、解釋:深拷貝,淺拷貝。
淺拷貝:拷貝構造函數簡單地制作了一個該資源的復制,而不對指針指向的堆空間拷貝一個復本堆空間,這樣兩個對象共享同一個堆空間,當其中一個對象析構時,另一個對象的指針則變成野指針,并且堆空間將產生兩次delete的錯誤;

深拷貝:拷貝構造函數對指針屬性所指的堆空間,也進行深度的空間復制,這樣,兩個對象就有獨立的空間和資源,這是深拷貝。

四 閱讀
1.      答案:8
思路:將x轉化為2進制,看含有的1的個數。


2.      輸出B::act1() called。

====== 機試
一
String::String(constchar*str)
{
if ( str == NULL ) // strlen在參數為NULL時會拋異常才會有這步判斷
{
m_data =newchar[1] ;
m_data[0] ='\\0' ;
}
else
{
m_data =newchar[strlen(str) +1];
strcpy(m_data,str);
}
} 
String::String(const String &another)
{
m_data =newchar[strlen(another.m_data) +1];
strcpy(m_data,other.m_data);
}

String& String::operator=(const String &rhs)
{
if ( this==&rhs)
return*this ;
delete []m_data; //刪除原來的數據,新開一塊內存
m_data =newchar[strlen(rhs.m_data) +1];
strcpy(m_data,rhs.m_data);
return*this ;
}

String::~String()
{
delete []m_data ;
}
二
#include <iostream.h> //
using namespace std; 
class Vector
{ 
    int vec[10];
public:
    Vector(int v[10]);
    Vector();
    Vector(Vector&);
    Vector operator+(Vector&);
    Vector operator-(Vector&);
    friend ostream& operator<<(ostream& out, Vector&);
};
Vector::Vector(int v[10])
{
    int i;
    for(i=0;i<10;i++)vec[i]=v[i];
} 
Vector::Vector()
{  int i;  for(i=0;i<10;i++)vec[i]=0;  }
Vector::Vector(Vector& v)
{  int i;   for(i=0;i<10;i++)vec[i]=v.vec[i]; }
Vector Vector::operator+(Vector& v)
{
    Vector z;  int i;
    for(i=0;i<10;i++)z.vec[i]=vec[i]+v.vec[i];
    return z;
}
Vector Vector::operator-(Vector& v)
{
    Vector z;  int i;
    for(i=0;i<10;i++)    z.vec[i]=vec[i]-v.vec[i];
    return z;
}
ostream& operator<<(ostream& out, Vector& v)
{  for(int i=0;i<10;i++)   out<<v.vec[i]<<",";   return out; }
void main()
{
    int a[10]={-4,1,0,10,5,-9,8,13,6,2,};
    int b[10]={-11,8,10,17,-6,9,6,7,12,5};
    Vector v1(a),v2(b),v3,v4;
    v3=v1+v2;
    v4=v2-v1;
    cout<<v3<<endl;
    cout<<v4<<endl;
} 
三
#include < iostream > 
#include < fstream > 
using namespace std; 
void main() 
{ 
          char a[100]; 
          ofstream writeFile("text.txt"); 
          int i; 
          while(1) 
          { 
                    cin>>a; 
                    if(a[0] == ’$’) 
                               return; 
                    i = 0; 
                    while(a[i] != ’\\0’) 
                    { 
                               if( a[i]>=65 && a[i]<=90 ) 
                                         a[i]=a[i] + 32; 
                               i++; 
                    } 
                    writeFile<< a<<" "; 
          } 
}



最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容