自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

EasyC++,構(gòu)造函數(shù)

開發(fā) 后端
在C++當中,這種用來構(gòu)造類的函數(shù),被稱為類構(gòu)造函數(shù)。構(gòu)造函數(shù)的原型和函數(shù)頭有一個比較明顯的特征——它雖然沒有返回值,但沒有被聲明稱void類型,實際上構(gòu)造函數(shù)沒有聲明類型。

[[439549]]

大家好,我是梁唐。

想要追求更好閱讀體驗的同學(xué),可以點擊「閱讀原文」訪問github倉庫。

構(gòu)造函數(shù)

我們定義了類之后,在使用之前,往往還需要對類進行初始化。這篇介紹的就是對類進行初始化的方法。

像是結(jié)構(gòu)體,我們可以使用列表初始化的方法進行初始化:

  1. struct Thing { 
  2.     char *pn; 
  3.     int m; 
  4. }; 
  5.  
  6. Thing th = {"hello", 23}; 

但類不行,因為結(jié)構(gòu)體當中的成員變量都是public的,而類往往是私有的。這意味著我們不能直接用程序訪問數(shù)據(jù)成員,需要設(shè)計成函數(shù)。

在C++當中,這種用來構(gòu)造類的函數(shù),被稱為類構(gòu)造函數(shù)。構(gòu)造函數(shù)的原型和函數(shù)頭有一個比較明顯的特征——它雖然沒有返回值,但沒有被聲明稱void類型,實際上構(gòu)造函數(shù)沒有聲明類型。

比如我們還是之前的類:

  1. class Stock { 
  2.     private: 
  3.      std::string company; 
  4.      long shares; 
  5.      double share_val; 
  6.      double total_val; 
  7.      void set_tot() {total_val = shares * share_val;} 
  8.     public
  9.      void accquire(const std::string &co, long n, double pr); 
  10.      void buy(long num, double price); 
  11.      void sell(long num, double price); 
  12.      void update(double price); 
  13.      void show(); 
  14. }; 
  15. #endif 

現(xiàn)在我們要加入構(gòu)造函數(shù),首先是在類中加上聲明。

  1. class Stock { 
  2.     ... 
  3.     Stock(const string &co, long n=0, double pr=0.0); 

注意看,我們實現(xiàn)定義的時候,函數(shù)是沒有返回類型的:

  1. Stock::Stock(const string &co, long n, double pr) { 
  2.     company = co; 
  3.     if (n < 0) { 
  4.         std::cerr << "Number of shares can't be negative;" 
  5.                << company << " shares set to 0.\n"
  6.         shares = 0; 
  7.     }else { 
  8.         shares = n; 
  9.         share_val = pr; 
  10.         set_tot(); 
  11.     } 

注意,構(gòu)造函數(shù)中的參數(shù)名不能和類成員名一致,否則會引起錯誤:

  1. Stock::Stock(const string &company, long shares, double share_val) {} 

如果一致的話,就會出現(xiàn)這樣的代碼:

  1. shares = shares; 

為了避免這種混亂,一般會在代碼風(fēng)格層面加以區(qū)分。比如在谷歌代碼規(guī)范當中,類中的private成員變量中需要使用后綴_。

最后,我們來看下構(gòu)造函數(shù)的使用。C++當中支持兩種方式,我們先來看第一種,顯式地調(diào)用:

  1. Stock food = Stock("word", 250, 2.5); 

另外一種方式是隱式地調(diào)用:

  1. Stock garment("furry", 50, 2.5); 

這種方式更加緊湊,我們每次使用new動態(tài)分配內(nèi)存時,也會使用類構(gòu)造函數(shù)。

  1. Stock *pstock = new Stock("ele", 18, 19.0); 

構(gòu)造函數(shù)的使用不同于一般的類方法,我們無法使用對象來調(diào)用構(gòu)造函數(shù)。

本文轉(zhuǎn)載自微信公眾號「Coder梁」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系Coder梁公眾號。

 

責(zé)任編輯:武曉燕 來源: Coder梁
相關(guān)推薦

2021-12-10 10:45:36

C++函數(shù)Stock

2021-12-11 19:02:03

函數(shù)C++對象

2021-12-29 20:31:40

C++多態(tài)指針

2021-11-10 10:48:36

C++函數(shù)指針

2021-12-12 18:13:54

C++This指針

2021-11-30 11:04:36

C++函數(shù)語言

2021-11-26 00:03:20

C++編譯常量

2021-11-27 11:50:09

C++靜態(tài)持續(xù)

2021-11-09 10:38:16

C++Const指針

2021-10-26 00:19:51

C++結(jié)構(gòu)體存儲

2021-12-08 10:43:09

C++實現(xiàn)

2021-12-30 14:58:58

C++函數(shù)動態(tài)

2021-12-15 10:25:57

C++運算符重載

2021-12-05 18:20:42

C++空間特性

2022-01-04 16:35:42

C++Protected關(guān)鍵字

2021-10-27 16:27:20

C++指針操控

2021-10-26 15:36:17

C++枚舉值類型

2021-12-26 00:08:35

C++初始化列表

2021-12-14 10:12:58

C++抽象數(shù)據(jù)

2021-11-26 10:56:28

C++存儲持續(xù)性
點贊
收藏

51CTO技術(shù)棧公眾號