物件資料成員的初始值
物件資料成員的初始值
物件的建構函式的作用是初始化類的成員變數,但是如果我們不顯式定義建構函式,編譯器就會給我們定義一個預設建構函式;這個預設建構函式中其實是什麼都沒有做的,如果這樣,我們生成該類的物件之後,它的資料成員值為多少呢?
具體程式如下:
#include <iostream>
using namespace std;
class Base{
public:
int val;
};
Base b;
int main()
{
Base c;
Base *base = new Base;
cout << "base->val is:" << base->val << endl;
cout << "b.val is:" << b.val << endl;
cout << "c.val is:" << c.val << endl;
}
編譯程式並多次執行上述程式,發現三次執行結果都不相同
base->val is:8002976
b.val is:0
c.val is:0
base->val is:7412416
b.val is:0
c.val is:0
base->val is:16325312
b.val is:0
c.val is:0
對上述程式執行結果分析可得出以下結論:
- 由於C++規定不顯式初始化的靜態變數和全域性變數應該初始化為0,因此靜態/全域性變數的資料成員會被自動初始化為0
- 區域性變數的分配是在棧上的,因此區域性物件的資料成員的值為隨機值
- 使用new分配的資料成員位於堆上,C++並沒有規定其初始值,因此其也為隨機數
注意:以上2、3 結果為理論結果,本人實測使用MinGW(windows)和Ubuntu下分別編譯,程式執行結果不同
Ubuntu下,base->val始終為0,而c.val為隨機數,二者正好相反
相關文章
- cosnt成員資料的初始化
- python之成員(物件導向)Python物件
- 深度解讀《深度探索C++物件模型》之資料成員的存取效率分析(一)C++物件模型
- 深度解讀《深度探索C++物件模型》之資料成員的存取效率分析(二)C++物件模型
- 深度解讀《深度探索C++物件模型》之資料成員的存取效率分析(三)C++物件模型
- [C++之旅] 14 物件成員與物件陣列C++物件陣列
- c#物件導向- 靜態成員和非靜態成員的區別C#物件
- C++ 靜態資料成員C++
- 物件導向 成員和巢狀物件巢狀
- 如何成為資料庫管理員(DBA)?資料庫
- C++ 中的 const 物件與 const 成員函式C++物件函式
- 03 #### `__dict__` , 用於獲取物件中的成員物件
- C++ 成員資料指標成員函式指標簡單測試C++指標函式
- Java基礎02 方法與資料成員Java
- 【python】物件導向之類成員(屬性)Python物件
- 類,物件,成員變數和區域性變數,匿名物件物件變數
- 深入理解python物件導向-類特殊成員Python物件
- #JAVA#物件導向(繼承中成員方法的關係)Java物件繼承
- 對於靜態成員來說是類的建構函式,對於例項成員是類的原型物件。函式原型物件
- C++學習筆記(三):類與物件--靜態成員變數與常成員函式C++筆記物件變數函式
- 主資料治理的成功取決於“強有力的”團隊成員XM
- #### 使用方法引用的使用場景--通過物件名引用成員方法物件
- Java 通過反射獲取類的資訊(成員變數,成員方法,構造方法)Java反射變數構造方法
- TypeScript 中 class 的例項成員與靜態成員TypeScript
- C++類中的常成員和靜態成員C++
- 美創科技正式成為“資料安全強基計劃”成員單位
- Python自定義類的成員並不一直是所有物件共享的Python物件
- Python基礎(二十):物件導向“類”第三課——類成員Python物件
- 【python】類的特殊成員Python
- ArrayList的常用成員方法
- 作為資料庫核心成員,如何讓淘寶不卡頓?資料庫
- 2020年資料員-崗位技能(資料員)模擬考試題庫及資料員-崗位技能(資料員)實操考試視訊
- 資料庫圈周盤點:資料庫執行管理員成新職業;資料庫公司Neon獲新融資資料庫
- 微課|中學生可以這樣學Python(7.3.2節):資料成員Python
- 物件業務的修改資料介面物件
- 4 管理Broker配置的成員
- HDFS成員的工作機制
- 組合(巢狀)的 補充,主動呼叫其他成員 以及特殊成員巢狀