構造函數和析構函數
類的構造函數:
一個類的構造函數是每當我們創建一個類的新對象時執行的類的一個特殊的成員函數。
構造函數將有完全相同於類的名稱,它不具有任何返回類型可言,甚至不是void。構造函數可以是非常有用的為某些成員變量設置初始值。
下麵的例子說明了構造函數的概念:
import std.stdio; class Line { public: void setLength( double len ) { length = len; } double getLength() { return length; } this() { writeln("Object is being created"); } private: double length; } void main( ) { Line line = new Line(); // set line length line.setLength(6.0); writeln("Length of line : " , line.getLength()); }
當上麵的代碼被編譯並執行,它會產生以下結果:
Object is being created Length of line : 6
參數化構造函數:
默認構造函數冇有任何參數,但如果需要,構造函數可以有參數。這可以幫助您在其創建為顯示在下麵的例子中,初始值分配給某個對象時:
import std.stdio; class Line { public: void setLength( double len ) { length = len; } double getLength() { return length; } this( double len) { writeln("Object is being created, length = " , len ); length = len; } private: double length; } // Main function for the program void main( ) { Line line = new Line(10.0); // get initially set length. writeln("Length of line : ",line.getLength()); // set line length again line.setLength(6.0); writeln("Length of line : ", line.getLength()); }
當上麵的代碼被編譯並執行,它會產生以下結果:
Object is being created, length = 10 Length of line : 10 Length of line : 6
類的析構函數:
析構函數執行時,類的一個對象超出範圍或當delete表達式應用到一個指針,指向該類的對象類的一個特殊成員函數。
析構函數將有完全相同的名稱作為類的前綴與符號(〜),它可以既不返回一個值,也不能帶任何參數。析構函數可以是走出來的程序如關閉文件,釋放內存等前釋放資源非常有用的
下麵的例子說明了析構函數的概念:
import std.stdio; class Line { public: this() { writeln("Object is being created"); } ~this() { writeln("Object is being deleted"); } void setLength( double len ) { length = len; } double getLength() { return length; } private: double length; } // Main function for the program void main( ) { Line line = new Line(); // set line length line.setLength(6.0); writeln("Length of line : ", line.getLength()); }
當上麵的代碼被編譯並執行,它會產生以下結果:
Object is being created Length of line : 6 Object is being deleted