- 有一個如下的結構體:
struct A{
long a1;
short a2;
int a3;
int *a4;
};
請問在64位編譯器下用sizeof(struct A)計算出的大小是多少?( )
A.24
B.28
C.16
D.18
答案決議
64位系統下指標為8個位元組,a1占4位元組,a2兩位元組,由于a3占4位元組, a2需要補齊2個位元組,對于a1,a2,a3一共開辟了12個位元組,由于a4占8個位元組,所以a4之后要 補齊4個位元組才能是8的整數倍,最后總和為24位元組,剛好也是8的倍數,所以最終結構體大小為24位元組
- 在C++中的結構體是否可以有成員函式?( )
A.不可以,結構型別不支持成員函式
B.可以有
C.不可以,只有類允許有成員函式
答案決議
A.C語言結構體不支持成員函式,但C++結構體支持,其class與struct本質沒有區別,唯一區別 在于默認時class的訪問屬性為私有,struct為公有
B.正確
C.C++結構體也支持成員函式
- 下列有關this指標使用方法的敘述正確的是( )
A.保證基類保護成員在子類中可以被訪問
B.保證基類私有成員在子類中可以被訪問
C.保證基類公有成員在子類中可以被訪問
D.保證每個物件擁有自己的資料成員,但共享處理這些資料的代碼
答案決議
A.基類保護成員在子類可以直接被訪問,跟this無關
B.基類私有成員在子類中不能被訪問,跟this無關
C.基類共有成員在子類和物件外都可以直接訪問,跟this無關
D.this指標代表了當前物件,能夠區分每個物件的自身資料,故正確
- 下面描述錯誤的是( )
A.this指標是非靜態成員函式的隱含形參.
B.每個非靜態的成員函式都有一個this指標.
C.this指標是存在物件里面的.
D.this指標可以為空
答案決議
A.靜態成員函式沒有this指標,只有非靜態成員函式才有,且為隱藏指標
B.非靜態成員函式的第一個引數就是隱藏的this指標
C.this指標在非靜態的成員函式里面,物件不存在,故錯誤
D.單純的對this賦空是不可以的,不過可以強轉直接賦空,不過一般不進行這樣的操作
- 下列關于建構式的描述正確的是( )
A.建構式可以宣告回傳型別
B.建構式不可以用private修飾
C.建構式必須與類名相同
D.建構式不能帶引數
答案決議
A.建構式不能有回傳值,包括void型別也不行
B.建構式可以是私有的,只是這樣之后就不能直接實體化物件
C.這是必須的啊,誰贊成誰反對?哈哈哈哈
D.建構式不光可以帶引數,還可以有多個建構式構成多載
- 在函式F中,本地變數a和b的建構式(constructor)和解構式(destructor)的呼叫順序是: ( )
Class A;
Class B;
void F() {
A a;
B b;
}
A.b構造 a構造 a析構 b析構
B.a構造 a析構 b構造 b析構
C.b構造 a構造 b析構 a析構
D.a構造 b構造 b析構 a析構、
答案決議
構造順序是按照陳述句的順序進行構造,析構是按照構造的相反順序進行析構,
- 設已經有A,B,C,D4個類的定義,程式中A,B,C,D解構式呼叫順序為?( )
C c;
int main()
{
A a;
B b;
static D d;
return 0;
}
A.D B A C
B.B A D C
C.C D B A
D.A B D C
答案決議
1、類的解構式呼叫完全按照建構式呼叫的相反順序進行呼叫
2、全域物件先于區域物件進行構造
3、靜態物件先于普通物件進行構造
所以構造的順序為 c d a b,因此答案為 B A D C
- 假定MyClass為一個類,則該類的拷貝建構式的宣告陳述句是( )
A.MyClass(MyClass x)
B.MyClass &(MyClass x)
C.MyClass(MyClass &x)
D.MyClass(MyClass *x)
答案決議
A.引數必須是參考,否則造成無限遞回
B.語法錯誤
C.正確
D.這種寫法只是普通的建構式,不能成為拷貝建構式
- 拷貝建構式的特點是( )
A.該函式名同類名,也是一種建構式,該函式回傳自身參考
B.該函式只有一個引數,是對某個物件的參考
C.每個類都必須有一個拷貝初始化建構式,如果類中沒有說明拷貝建構式,則編譯器系統會自動生成一個預設拷貝建構式,作為該類的保護成員
D.拷貝初始化建構式的作用是將一個已知物件的資料成員值拷貝給正在創建的另一個同類的物件
答案決議
A.拷貝建構式也是一建構式,因此不能有回傳值
B.該函式引數是自身型別的物件的參考
C.自動生成的預設拷貝建構式,作為該類的公有成員,否則無法進行默認的拷貝構造
D.用物件初始化物件這是拷貝建構式的使命,故正確
- 以下代碼共呼叫多少次拷貝建構式: ( )
Widget f(Widget u)
{
Widget v(u);
Widget w=v;
return w;
}
main(){
Widget x;
Widget y=f(f(x));
}
A.1
B.3
C.5
D.7
答案決議
整個程式分別在,x初始化u、u初始化v、v初始化w、w回傳時呼叫,注意w回傳時初始u不在呼叫拷貝建構式,第二次呼叫 f()函式時,相當于u的結合會少呼叫一次,其他不變,所以總體次數為4+3=7次
- 已知運算式++a中的"++"是作為成員函式多載的運算子,則與++a等效的運算子函式呼叫形式為( )
A.a.operator++()
B.a.operator++(0)
C.a.operator++(int)
D.operator++(a,0)
答案決議
A.正確
B.operator++()傳遞了整形引數,故為后置++,錯誤
C.呼叫函式傳遞型別,導致語法錯誤
D.引數過多,語法錯誤
- 在多載一個運算子為成員函式時,其引數表中沒有任何引數,這說明該運算子是 ( )
A.無運算元的運算子
B.二元運算子
C.前綴一元運算子
D.后綴一元運算子
答案決議
A.多載為成員函式時,其函式的引數個數與真實的函式引數個數會減少1個,減少的則 通過this指標進行傳遞,所以無參 則說明有一個引數,故錯誤
B.無參成員函式相當于有一個引數的全域函式,不能是二元運算子
C.正確
D.區分前綴后綴時,后綴運算需要加一個int引數
- 下列關于賦值運算子“=”多載的敘述中,正確的是( )
A.賦值運算子只能作為類的成員函式多載
B.默認的賦值運算子實作了“深層復制”功能
C.多載的賦值運算子函式有兩個本類物件作為形參
D.如果己經定義了復制拷貝建構式,就不能多載賦值運算子
答案決議
A.因為賦值符號=需要物件進行驅動,所以只能多載為成員函式
B.默認的賦值運算子是按成員成員,屬于淺賦值
C.引數只有一個,另一個通過this指標傳遞
D.兩個函式的呼叫場景不同,相互沒有影響
- 若要對data類中多載的加法運算子成員函式進行宣告,下列選項中正確的是( )
A.Data operator+(Data);
B.Data operator(Data);
C.operator+(Data,Data);
D.Data+(Data);
答案決議
A.正確
B.語法錯誤,缺少運算子+
C.成員函式引數過多
D.沒有運算子多載關鍵字operator
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/292231.html
標籤:其他
下一篇:簡易版掃雷游戲【C語言版】
