加入星計(jì)劃,您可以享受以下權(quán)益:

  • 創(chuàng)作內(nèi)容快速變現(xiàn)
  • 行業(yè)影響力擴(kuò)散
  • 作品版權(quán)保護(hù)
  • 300W+ 專(zhuān)業(yè)用戶(hù)
  • 1.5W+ 優(yōu)質(zhì)創(chuàng)作者
  • 5000+ 長(zhǎng)期合作伙伴
立即加入
  • 正文
  • 相關(guān)推薦
  • 電子產(chǎn)業(yè)圖譜
申請(qǐng)入駐 產(chǎn)業(yè)圖譜

嵌入式C++面試題

12/02 09:35
644
閱讀需 9 分鐘
加入交流群
掃碼加入
獲取工程師必備禮包
參與熱點(diǎn)資訊討論

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)體類(lèi)型名,而不是結(jié)構(gòu)體變量名。我們應(yīng)該使用結(jié)構(gòu)體變量名(在這個(gè)例子中是p)來(lái)訪(fǎng)問(wèn)其成員。

B.?point={ 1, 2 };
這個(gè)選項(xiàng)也是錯(cuò)誤的。同樣地,point是結(jié)構(gòu)體類(lèi)型名,不是變量名。此外,這種初始化方式通常用于結(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)算符(.)訪(fǎng)問(wèn)其成員xy,然后分別給它們賦值。

D.?p = { 1, 2 };
這個(gè)選項(xiàng)在C++11及更高版本中對(duì)于某些情況是正確的,它使用了列表初始化(也稱(chēng)為聚合初始化)。但是,這種語(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.所謂私有成員是指只有類(lèi)中所提供的成員函數(shù)才能直接使用它們,任何類(lèi)以外的函數(shù)對(duì)它們的訪(fǎng)問(wèn)都是非法的。

A?是

B?否

解析:

這是一道關(guān)于C++中類(lèi)成員訪(fǎng)問(wèn)權(quán)限的判斷題。

在C++中,類(lèi)的成員可以有不同的訪(fǎng)問(wèn)權(quán)限,包括private(私有)、protected(受保護(hù))和public(公有)。其中,private成員確實(shí)是只有類(lèi)內(nèi)部(包括類(lèi)的成員函數(shù)和友元函數(shù))才能直接訪(fǎng)問(wèn)的,類(lèi)以外的任何函數(shù)都不能直接訪(fǎng)問(wèn)它們。

根據(jù)題目描述,“所謂私有成員是指只有類(lèi)中所提供的成員函數(shù)才能直接使用它們,任何類(lèi)以外的函數(shù)對(duì)它們的訪(fǎng)問(wèn)都是非法的”,這一說(shuō)法是準(zhǔn)確的。私有成員確實(shí)是被封裝在類(lèi)內(nèi)部的,外部無(wú)法直接訪(fǎng)問(wèn),必須通過(guò)類(lèi)提供的公有成員函數(shù)(如getter和setter方法)來(lái)進(jìn)行間接訪(fǎng)問(wèn)。

因此,答案是:A 是

4.虛析構(gòu)函數(shù)的作用是()?

A?虛基類(lèi)必須定義虛析構(gòu)函數(shù)

B?類(lèi)對(duì)象作用域結(jié)束時(shí)釋放資源

C?delete動(dòng)態(tài)對(duì)象時(shí)釋放資源

D?無(wú)意義

解析:

虛析構(gòu)函數(shù)在C++中的作用是確保在刪除子類(lèi)對(duì)象時(shí),能夠正確地釋放資源和調(diào)用析構(gòu)函數(shù),從而避免資源泄漏的情況。現(xiàn)在我們來(lái)逐一分析每個(gè)選項(xiàng):

A. 虛基類(lèi)必須定義虛析構(gòu)函數(shù)

這個(gè)選項(xiàng)表述不準(zhǔn)確。并不是所有虛基類(lèi)都必須定義虛析構(gòu)函數(shù),而是當(dāng)基類(lèi)被用作多態(tài)基類(lèi),且可能通過(guò)基類(lèi)指針刪除派生類(lèi)對(duì)象時(shí),通常需要將析構(gòu)函數(shù)聲明為虛函數(shù)。虛析構(gòu)函數(shù)的主要作用是確保在這種情況下能夠正確地調(diào)用派生類(lèi)的析構(gòu)函數(shù)。

B. 類(lèi)對(duì)象作用域結(jié)束時(shí)釋放資源

這個(gè)選項(xiàng)描述了析構(gòu)函數(shù)的一般作用,即釋放對(duì)象所占用的資源。然而,它并沒(méi)有特指虛析構(gòu)函數(shù)的獨(dú)特作用。虛析構(gòu)函數(shù)的主要作用是處理基類(lèi)指針指向派生類(lèi)對(duì)象時(shí)的析構(gòu)過(guò)程。

C. delete動(dòng)態(tài)對(duì)象時(shí)釋放資源

這個(gè)選項(xiàng)更接近于虛析構(gòu)函數(shù)的作用。當(dāng)使用基類(lèi)指針指向一個(gè)派生類(lèi)對(duì)象,并通過(guò)delete釋放該指針指向的對(duì)象時(shí),如果基類(lèi)中沒(méi)有定義虛析構(gòu)函數(shù),那么只會(huì)調(diào)用基類(lèi)的析構(gòu)函數(shù),子類(lèi)的析構(gòu)函數(shù)不會(huì)被調(diào)用,這可能導(dǎo)致子類(lèi)特有的資源沒(méi)有被正確釋放。虛析構(gòu)函數(shù)確保了在這種情況下能夠正確地調(diào)用派生類(lèi)的析構(gòu)函數(shù),從而釋放資源。

D. 無(wú)意義

這個(gè)選項(xiàng)顯然是不正確的。虛析構(gòu)函數(shù)在C++中具有重要的意義和作用。

5.下列關(guān)于bool,int,float,指針類(lèi)型的變量a 與“零”的比較語(yǔ)句正確的有?

A?bool : if(!a)

B?int : if(a == 0)

C?float: if(a == 0.0)

D?指針: if(a == nullptr)

解析:

在C++編程語(yǔ)言中,我們對(duì)比較boolint、float以及指針類(lèi)型的變量a與“零”的正確方式進(jìn)行分析:

A.?bool : if(!a)

對(duì)于bool類(lèi)型,!a用于檢測(cè)a是否為false。在C++中,false與整數(shù)0是等價(jià)的,所以這個(gè)判斷是正確的。當(dāng)afalse(或者等價(jià)于0)時(shí),!a的結(jié)果為true,條件判斷成立。

B.?int : if(a == 0)

對(duì)于int類(lèi)型,直接使用==操作符與0進(jìn)行比較是檢測(cè)a是否為0的標(biāo)準(zhǔn)方法。這個(gè)判斷是正確的。

C.?float: if(a == 0.0)

對(duì)于float類(lèi)型,理論上可以使用==操作符與0.0進(jìn)行比較來(lái)檢查a是否為0.0。然而,在浮點(diǎn)數(shù)比較中,由于精度問(wèn)題,直接比較可能并不總是可靠。盡管如此,此選項(xiàng)在語(yǔ)法上是正確的,且在沒(méi)有精度損失或極小誤差的情況下是有效的。

D.?指針: if(a == nullptr)

對(duì)于指針類(lèi)型,使用==操作符與nullptr(或在舊版C++中使用NULL,但在現(xiàn)代C++中推薦使用nullptr)進(jìn)行比較是檢查指針是否為空的推薦方法。這個(gè)判斷是正確的。

未完待續(xù),持續(xù)更新!以防后邊找不到可以點(diǎn)贊收藏下!

相關(guān)推薦

電子產(chǎn)業(yè)圖譜