国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

Nice用戶手冊(三)

2024-07-21 02:14:14
字體:
來源:轉載
供稿:網友
第三章 類與接口類聲明

 

數據成員
一個類最主要的組件使它的數據成員列表。數據成員是附屬于每一個類實例的變量,它有類型、名稱,可以有初始值。數據成員的聲明語法如下:

type field-name[ = initial-value];



如果沒有被賦予默認值,那么每一次調用構造器都必須給這個成員賦予一個指定的值。如果它擁有了默認值,對構造器的調用會覆蓋那個值,在這種情況下默認值不會被計算(只有當計算會帶來副作用時這一點會變得很重要)。


 

構造器
nice中的類有一個由編譯器自動生成的默認的(或者說“自動的”)構造器。這個構造器允許類中所有的事件成員被顯式地初始化,但如果一個數據成員在聲明時已經有了一個默認值時,它將不會出現在構造器中而是使用默認值。在大多數情況下,這個默認構造器已經可以滿足需要,它把程序員從煩悶的,僅僅是接收值并將它們賦給數據成員的代碼中解脫出來。


 


示例3.1 使用默認構造器聲明及創建類



class car{



  string brand;



  string model;



  int numberofwheels = 4;



  int numberofdrivingwheels = 2;



}




 


void test(){



  car renault5 = new car(brand: "renault", model: "cinq");



  car jeep = new car(brand: "jeep", model: "some jeep", numberofdrivingwheels: 4);



}




 


調用構造器時必須包含數據成員的名稱,這一點很重要。首先,這樣不用查看類定義就能很容易理解參數代表著什么。其次,可以不用再將數據成員武斷地列序1。(1在java中當構造器參數的次序必須被改變時會出現問題。這樣做必須修改所有的調用點,而這種修改在最好情況下會導致繁瑣的工作和錯誤,而在最壞情況下是不可能實現的(當編寫一個庫時)。當順序改變了而只有一部分調用點被修改后會出現以下情況:如果交換的參數類型不一致,編譯無法通過;或者,編譯可以通過但在運行時產生錯誤的結果。在java中沒有一個簡單的方法能解決這個問題。在nice中,調用構造器時使用名稱則是一種解決方案。)因為數據成員的名稱被顯式使用,賦值時可以使用任何順序。

當構造器中需要處理更多的控制時,可以寫一個新的構造器以取代自動構造器。新構造器的寫法很像其它方法,但在聲明時有細微差別:


 


new class-name(param-typeparam-name[ = initial-value], ...){



  method-body;



  this(argument, ...);



}




 


語法中要求任何自定義構造器中最后一條語句必須調用同一類型的其它構造器,在大多數情況下調用的是自動構造器。


 


示例3.2 使用自定義構造器定義并創建構類



/**



 * class which encapsulates a strategy for



 * way of translating a character.



 */



class translator{



  //the function that actually performs the translation



  char->char transfunction;



  //convenience method



  char translate(char input){



    return (this.transfunction)(input);



  }



}




 


/**



 * constructor which takes a map of characters, and



 * returns a translator which looks up the input



 * character in the map, or just returns the input



 * character if it's not in the map.



 */



new translator(map<char,char> characters){



  this(transfunction: char c => characters.get(c) || c);



}



//a translator which provides rot13 ciphering.



//uses automatic constructor.



var translator rot13 = new translator(transfunction:char c => char(int(c) + 13));



//a translator which just changes 's' or 's' to '$'.



//uses custom constructor.



var translator stodollar = new translator(characters: listtomap([('s', '$'),('s', '$')]));


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石家庄市| 华蓥市| 兴山县| 水城县| 霍林郭勒市| 商河县| 阳朔县| 瑞安市| 积石山| 百色市| 萝北县| 普定县| 中西区| 新建县| 盐山县| 禹州市| 天长市| 科尔| 阿拉善右旗| 册亨县| 玛多县| 二手房| 卢湾区| 南乐县| 北京市| 花莲市| 高台县| 乌兰察布市| 靖宇县| 白水县| 太湖县| 龙陵县| 仁布县| 阳谷县| 道真| 太仓市| 永泰县| 江津市| 合山市| 临桂县| 吉林市|