c++筆記--數組對象、vector對象和建構函式

來源:互聯網
上載者:User

一、關於數組對象和vector對象
Account *pact = new Account[10]
1.在堆中分配包含10個Account類對象的數組;
2.用Account類預設建構函式初始化
釋放*pact不要用delete pact只是第一個類對象上調用了解構函式;應該使用delete [] pact;
vector<Point> vec(5);//I
初始化過程
1.建立一個底層類型的臨時對象,並在其上應用預設建構函式;
2.在vector的每個元素上依次應用拷貝建構函式,用臨時類對象的拷貝初始化每一個類對象;
3.刪除臨時類對象;

I式初始化代價比較大,不推薦使用,作為一般設計原則,如下操作:
vector<Point> cvs;
int  cv_cnt = cal_control_vertices();
//預留記憶體以便存放cv_cnt ponit對象
//cvs仍然為空白
cvs.reserve(cv_cnt);
//開啟一個檔案并迭代它;
ifstream infile("spriteModel");
istream_iterator<Point> cvfile(infile), eos;
//現在插入元素
copy(cvfile, eos, inserter(cvs, cvs.begin()));
二、關於初始化表和建構函式內使用資料成員的賦值之間的區別,如有如下代碼:
inline Account::Accoutn(const char *name, double opening_bal)
 : _name(name), _balance(openingbal)
 {
  _acct_nmbr = get_unique_acct_nmbr();
 }

inline Account::Accoutn(const char *name, double opening_bal)
 {
  _name = name;
  _balance = openingbal;
  _acct_nmbr = get_unique_acct_nmbr();
 }
1.兩種實現的結果是一樣的;
2.區別:成員初始化表只提供該類資料成員初始化,而建構函式體內對資料成員設定值是一個賦值操作;
具體的說,我們可以把建構函式的執行過程分為兩個階段:隱式或顯示初始化階段和一般的計算階段。計算階段由函數體內的所有語句構成。
在計算階段,資料成員的設定被認為式賦值,而不是初始化;
隱式或顯示初始化決定與是否有成員初始化表,隱式初始化調用的順序是先調用基類的函數,然後調用類成員的建構函式,以下代碼:
inlien Account::Account()
{
 _name = "";
 _balance = 0.0;
 _acct_nmbr = 0;
}
在初始化階段_name已經調用了它的預設構著函數,所以無須在類初始化函數中重複賦值;
對於內建非資料成員_balance和_acc_nmbr,兩種初始化方法的結果很效能基本相同,但更受歡迎的是使用成員初始化表:
inline Account::Account() : _balane(0.0), _acct_nmbr(0)
{}
兩個例外,const和引用資料成員必須在成員初始化表中初始化,當建構函式開始初始化必須都已經發生。
小提示:成員初始化表中初始化順序是 右->左

休息休息

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.