1.下面程序的輸出的是()
#include <iostream>
using namespace std;
int main() {
int x = 7, y = 3;
cout << (y = x / y) << endl;
return 0;
}
解析:
首先,我們來(lái)分析這段程序的執(zhí)行過(guò)程。
程序定義了兩個(gè)整型變量?x
?和?y
,并分別初始化為 7 和 3。
接下來(lái),程序執(zhí)行?cout << (y = x / y) << endl;
?這一行。
在這里,首先計(jì)算?x / y
?的值。由于?x
?是 7,y
?是 3,所以?x / y
?的結(jié)果是整數(shù)除法,即?7 / 3
,結(jié)果為 2(整數(shù)除法會(huì)舍去小數(shù)部分)。
然后,將計(jì)算結(jié)果 2 賦值給變量?y
。
最后,輸出?y
?的值,即 2。
因此,程序的輸出結(jié)果是 2。
綜上所述,程序的輸出是:2
復(fù)制代碼
2.有以下說(shuō)明語(yǔ)句:
struct point {
int x;
int y;
} p;
則正確的賦值語(yǔ)句是()
A?point.x = 1; point.y = 2;
B?point={ 1, 2 };
C?p.x = 1; p.y = 2;
D?p = { 1, 2 };
解析:
在C++中,對(duì)于結(jié)構(gòu)體(struct
)的賦值,我們需要遵循一定的語(yǔ)法規(guī)則?,F(xiàn)在我們來(lái)逐一分析每個(gè)選項(xiàng):
A.?point.x = 1; point.y = 2;
這個(gè)選項(xiàng)是錯(cuò)誤的。在這里,point
是結(jié)構(gòu)體類型名,而不是結(jié)構(gòu)體變量名。我們應(yīng)該使用結(jié)構(gòu)體變量名(在這個(gè)例子中是p
)來(lái)訪問(wèn)其成員。
B.?point={ 1, 2 };
這個(gè)選項(xiàng)也是錯(cuò)誤的。同樣地,point
是結(jié)構(gòu)體類型名,不是變量名。此外,這種初始化方式通常用于結(jié)構(gòu)體變量的聲明時(shí),而不是賦值時(shí)。即使我們假設(shè)這里寫(xiě)的是變量名(比如p
),這種語(yǔ)法在賦值時(shí)也是不正確的。
C.?p.x = 1; p.y = 2;
這個(gè)選項(xiàng)是正確的。在這里,我們使用了結(jié)構(gòu)體變量名p
,并通過(guò)點(diǎn)運(yùn)算符(.
)訪問(wèn)其成員x
和y
,然后分別給它們賦值。
D.?p = { 1, 2 };
這個(gè)選項(xiàng)在C++11及更高版本中對(duì)于某些情況是正確的,它使用了列表初始化(也稱為聚合初始化)。但是,這種語(yǔ)法通常用于結(jié)構(gòu)體的聲明和初始化,而不是在已經(jīng)聲明的變量上進(jìn)行賦值。在某些編譯器和/或標(biāo)準(zhǔn)模式下,這可能不被接受作為賦值語(yǔ)句。然而,在C++11及以后,如果p
是一個(gè)自動(dòng)變量(非靜態(tài)局部變量),并且在其聲明時(shí)沒(méi)有初始化,那么這種賦值在語(yǔ)法上是允許的。但在更嚴(yán)格或更傳統(tǒng)的語(yǔ)境中,人們可能更傾向于使用選項(xiàng)C來(lái)進(jìn)行賦值。
綜上所述,最普遍且無(wú)誤的賦值方法是選項(xiàng)C:
復(fù)制代碼
3.所謂私有成員是指只有類中所提供的成員函數(shù)才能直接使用它們,任何類以外的函數(shù)對(duì)它們的訪問(wèn)都是非法的。
A?是
B?否
解析:
這是一道關(guān)于C++中類成員訪問(wèn)權(quán)限的判斷題。
在C++中,類的成員可以有不同的訪問(wèn)權(quán)限,包括private
(私有)、protected
(受保護(hù))和public
(公有)。其中,private
成員確實(shí)是只有類內(nèi)部(包括類的成員函數(shù)和友元函數(shù))才能直接訪問(wèn)的,類以外的任何函數(shù)都不能直接訪問(wèn)它們。
根據(jù)題目描述,“所謂私有成員是指只有類中所提供的成員函數(shù)才能直接使用它們,任何類以外的函數(shù)對(duì)它們的訪問(wèn)都是非法的”,這一說(shuō)法是準(zhǔn)確的。私有成員確實(shí)是被封裝在類內(nèi)部的,外部無(wú)法直接訪問(wèn),必須通過(guò)類提供的公有成員函數(shù)(如getter和setter方法)來(lái)進(jìn)行間接訪問(wèn)。
因此,答案是:A 是
4.虛析構(gòu)函數(shù)的作用是()?
A?虛基類必須定義虛析構(gòu)函數(shù)
B?類對(duì)象作用域結(jié)束時(shí)釋放資源
C?delete動(dòng)態(tài)對(duì)象時(shí)釋放資源
D?無(wú)意義
解析:
虛析構(gòu)函數(shù)在C++中的作用是確保在刪除子類對(duì)象時(shí),能夠正確地釋放資源和調(diào)用析構(gòu)函數(shù),從而避免資源泄漏的情況。現(xiàn)在我們來(lái)逐一分析每個(gè)選項(xiàng):
A. 虛基類必須定義虛析構(gòu)函數(shù)
這個(gè)選項(xiàng)表述不準(zhǔn)確。并不是所有虛基類都必須定義虛析構(gòu)函數(shù),而是當(dāng)基類被用作多態(tài)基類,且可能通過(guò)基類指針刪除派生類對(duì)象時(shí),通常需要將析構(gòu)函數(shù)聲明為虛函數(shù)。虛析構(gòu)函數(shù)的主要作用是確保在這種情況下能夠正確地調(diào)用派生類的析構(gòu)函數(shù)。
B. 類對(duì)象作用域結(jié)束時(shí)釋放資源
這個(gè)選項(xiàng)描述了析構(gòu)函數(shù)的一般作用,即釋放對(duì)象所占用的資源。然而,它并沒(méi)有特指虛析構(gòu)函數(shù)的獨(dú)特作用。虛析構(gòu)函數(shù)的主要作用是處理基類指針指向派生類對(duì)象時(shí)的析構(gòu)過(guò)程。
C. delete動(dòng)態(tài)對(duì)象時(shí)釋放資源
這個(gè)選項(xiàng)更接近于虛析構(gòu)函數(shù)的作用。當(dāng)使用基類指針指向一個(gè)派生類對(duì)象,并通過(guò)delete
釋放該指針指向的對(duì)象時(shí),如果基類中沒(méi)有定義虛析構(gòu)函數(shù),那么只會(huì)調(diào)用基類的析構(gòu)函數(shù),子類的析構(gòu)函數(shù)不會(huì)被調(diào)用,這可能導(dǎo)致子類特有的資源沒(méi)有被正確釋放。虛析構(gòu)函數(shù)確保了在這種情況下能夠正確地調(diào)用派生類的析構(gòu)函數(shù),從而釋放資源。
D. 無(wú)意義
這個(gè)選項(xiàng)顯然是不正確的。虛析構(gòu)函數(shù)在C++中具有重要的意義和作用。
5.下列關(guān)于bool,int,float,指針類型的變量a 與“零”的比較語(yǔ)句正確的有?
A?bool : if(!a)
B?int : if(a == 0)
C?float: if(a == 0.0)
D?指針: if(a == nullptr)
解析:
在C++編程語(yǔ)言中,我們對(duì)比較bool
、int
、float
以及指針類型的變量a
與“零”的正確方式進(jìn)行分析:
A.?bool : if(!a)
對(duì)于bool
類型,!a
用于檢測(cè)a
是否為false
。在C++中,false
與整數(shù)0
是等價(jià)的,所以這個(gè)判斷是正確的。當(dāng)a
為false
(或者等價(jià)于0
)時(shí),!a
的結(jié)果為true
,條件判斷成立。
B.?int : if(a == 0)
對(duì)于int
類型,直接使用==
操作符與0
進(jìn)行比較是檢測(cè)a
是否為0
的標(biāo)準(zhǔn)方法。這個(gè)判斷是正確的。
C.?float: if(a == 0.0)
對(duì)于float
類型,理論上可以使用==
操作符與0.0
進(jìn)行比較來(lái)檢查a
是否為0.0
。然而,在浮點(diǎn)數(shù)比較中,由于精度問(wèn)題,直接比較可能并不總是可靠。盡管如此,此選項(xiàng)在語(yǔ)法上是正確的,且在沒(méi)有精度損失或極小誤差的情況下是有效的。
D.?指針: if(a == nullptr)
對(duì)于指針類型,使用==
操作符與nullptr
(或在舊版C++中使用NULL
,但在現(xiàn)代C++中推薦使用nullptr
)進(jìn)行比較是檢查指針是否為空的推薦方法。這個(gè)判斷是正確的。
未完待續(xù),持續(xù)更新!以防后邊找不到可以點(diǎn)贊收藏下!