文章目錄
關於多線程與多進程編程,下面描述正確的是:ACD
- A. 多進程裏,子進程可獲得父進程的所有堆與棧的數據;而線程會與同進程的其他線程共享數據,擁有自己的棧空間
- 子進程得到父的複製
- B. 線程因爲有自己的獨立棧空間且共享數據,所有執行的開銷相對較大,同時不利於資源管理和保護
- C. 線程的通信速度更快,切換更快,因爲他們在同一地址空間內
- D. 線程使用公共變量/內存時需要使用同步機制,因爲他們在同一地址空間內
以下關於棧的說法正確的是:A
A. 在棧空的情況下,一定不能作出棧操作,否則產生溢出
- 可能叫下溢
B. 棧一定是順序存儲的線性結構
C. 空棧是所有元素都爲0的棧
D. 一個棧的輸入序列爲:A,B,C,D,可得到輸出序列:C,A,B,D
關於多線程與多進程編程,下面描述錯誤的是:ABC
A. 多進程裏,子進程可獲得父進程的部分堆與棧的數據;而線程會與同進程的其他線程共享數據,擁有自己的棧空間
B. 線程的通信速度更快,切換更快,因爲他們在同一地址空間內
C. 線程使用公共變量/內存時不需要使用同步機制,因爲他們在同一地址空間內
D. 因多線程裏,每個子進程有自己的地址空間,因此相互之間通信時,線程不如進程靈活和方便
下列關於多態性說法不正確的是:
A. 重指函數名相同,但是參數列表個數和順序,參數類型,以及返回類型不同
B. 重載 overload 和 重寫 override 是一個意思
C. 多態行有靜態和動態多態兩種
D. c++中 final 關鍵字表示函數不能再次被override
定義析構函數時,注意:C
A. 其名與類名完全相同
B. 返回類型是void類型
C. 無形參,也不可重載
D. 函數體中必須有delete語句
C中出現如下類型的結構體定義:
typedef struct holder
{ struct holder *next;
struct holder *prev;
char buffer[ 0 ];
}holder;
- char data[ 0 ] 作用?
A. 方便管理內存緩衝區
B. 減少內存碎片化
C. 使結構體數據對齊
D. 沒有作用
對靜態成員的正確描述是()?
A. 靜態數據成員要在類外定義和初始化
B. 非靜態成員函數也可以操作靜態數據成員
C. 全局變量、靜態全局變量和靜態局部變量都存放在內存的靜態存儲區域,局部變量存放在內存的棧區
D. 調用靜態成員函數時要通過類或對象激活,所以靜態成員函數擁有this指針
開講啦!!
一、靜態數據成員與靜態成員函數
- 靜態數據成員不依賴對象,依賴於類,
- 即:如果不實例化對象,靜態數據成員在內存中仍然是存在的:
- 普通的數據成員必須要實例化後才能存在。
- 靜態數據成員的初始化不能通過構造函數,往往單獨進行
- 訪問靜態成員有兩種方式:
- 不通過對象而直接通過類
- 通過對象調用
# include <iostream>
class Tank
{
public:
Tank() { s_iCount++; }
~Tank() { s_iCount--; }
static int getCount() { return s_iCount; }
static int s_iCount;
private:
std::string m_strCode;
};
int Tank::s_iCount = 0;
int main(void)
{
std::cout << Tank::getCount() << std:: endl;
std::cout << Tank::s_iCount<< std::endl;
Tank tank;
std::cout << tank.getCount() << std::endl;
std::cout << tank.s_iCount << std::endl;
return 0;
}
二、從內存角度看靜態數據成員
- 在對象誕生之前,靜態數據成員就已經誕生了,且只誕生一次,它的值可能發生變化,但它在內存中始終是一個
三、從this指針談靜態成員函數
四、注意事項
- 靜態成員函數不能調用非靜態成員函數和非靜態數據成員
- 非靜態成員函數則可以調用靜態數據成員和靜態成員函數。
參考鏈接
- https://www.cnblogs.com/Tang-tangt/p/9677885.html
ADD R0, R1, #3屬於(A):
A. 立即尋址方式
B. 多寄存器尋址
C. 寄存器直接尋址
D. 相對尋址