C 基礎知識整理 基礎知識(3) 類的構造

2021-08-27 00:27:22 字數 1721 閱讀 6727

我們定義了yschool,yteacher類,例項化物件時:

yschool shool1 = new yschool();

shool1.id = 1;

shool1.name = "清華附中";

yschool school2 = new yschool();

school2.id = 2;

school2.name = "北師大附中";

這樣寫對不對呢,其實在邏輯上是不正確的,因為例項化物件時,它的屬性應該是和例項化一起就有的,而不是後來再加屬性。在程式中表現就是,屬性要有初值。

所以,在類中就要有這樣乙個方法,無返回型別,方法名和類名相同,有引數類表或者沒有引數列表。它就是構造方法,俗稱「構造器」或「建構函式」。乙個類中可以有乙個或多個建構函式,當然有時你沒寫建構函式,這並不代表這個類就沒有建構函式,它依然有乙個預設的建構函式的。如果使多個建構函式的話,它們各自的引數列表必須不同。

下面以yschool為例完善這個類。

/// /// yschool類的id和name是它的固有屬性,它的值應該是確定的。

/// 例項化的同時對屬性賦初值,用到建構函式。

///

public class yschool

}public string name

}/// /// 沒有引數的構造器稱之為「預設構造器」;如果沒有寫乙個構造器,那麼

///系統也會提供乙個預設的構造器,所以說類至少有乙個構造器;

///當然,如果系統提供的預設建構函式,則屬性初值為宣告時賦的初值,如果宣告

///未賦初值,則是「型別預設值」,比如0或者null。

///

public yschool()

/// /// 帶有引數列表的建構函式,

/// 屬性的值就是傳入的列表的值。

///

///

///

public yschool(int id, string name)

public yschool(int id)

}

class program

}

上面還修改了id和name的get/set屬性,都改為只有get,因為這些屬性值都是固有屬性,例項化之後再賦值也就不符合邏輯了。也就是這些屬性是唯讀的。

**中提到了預設值,這裡簡單說一下。在宣告欄位的時候,可以用賦值運算子「=」給字段直接加乙個值,比如

string name = string.empty;
這個不是給變數賦值,預設值只是一種形式,真正給變數賦值還是在建構函式中。一般規範的**都要求宣告變數時要賦初值的。如果生命時沒有賦值的字段,都會由編譯器增加一句賦值**,將該字段賦值為設定的預設值。其實,無論我們是否給字段增加了預設值,欄位都具備預設值的,只不過如果我們沒有人為增加預設值,欄位的預設值將是0或null。

這裡還有一點要注意,前面提到過系統預設的建構函式,但是當定義了建構函式後,系統預設建構函式就不存在了。因此如果某些情況下,既要用到預設建構函式和帶引數的建構函式,就要手動定義預設建構函式了。比如,

public yschool()

或者

public yschool()

綜上所述例項化類的規範表示式應該是:類名 例項名 = new 類名(構造函式引數列表);

C 基礎知識整理 基礎知識(2) 類

類,是物件導向語言的基礎。類的三大特性 封裝 繼承 多型。最基本的特性就是封裝性。程式設計師用程式描述世界,將世界的所有事物都看成物件,怎麼描述這個物件?那就是類了。也就是用類來封裝物件。用書上的話說,類是具有相同屬性和行為的物件的抽象。寶馬汽車 別克汽車 五菱之光汽車.基本具有相同的屬性和行為,所...

C 基礎知識整理 基礎知識(2) 類

類,是物件導向語言的基礎。類的三大特性 封裝 繼承 多型。最基本的特性就是封裝性。程式設計師用程式描述世界,將世界的所有事物都看成物件,怎麼描述這個物件?那就是類了。也就是用類來封裝物件。用書上的話說,類是具有相同屬性和行為的物件的抽象。寶馬汽車 別克汽車 五菱之光汽車.基本具有相同的屬性和行為,所...

C 基礎知識整理

在c 98中,有63個關鍵字。不能遺漏標準名稱,任何不帶標準名稱來說關鍵字個數都是耍流氓 1.定義命名空間,需要用到namespace關鍵字,後面跟命名空間的名字,然後接 中即為命名空間的成員。2.命名空間的使用 namespace n int main using n b int main usi...