這就聲明了一個名為 stud的類。可以看到聲明類的方法是由聲明結構體類型的方法發展而來的。它除了包含數據部分以外,還包括了對這些數據的操作部分,也就是把數據和操作封裝在一起。display是一個函數,用來輸出本對象中學生的學號、姓名和性別。類除了具有封裝性外,還采用了信息隱蔽原則,使類的成員與外界的聯系減少到最低程度。但是還是需要有外界的接口,一般是把數據隱藏起來,而把成員函數作為對外界的接口。接著,就有了類的成員包括兩大類:一類是私有的;一類是公有的,還有一類是受保護的。
class stud { PRivate: int num; char name[10]; char sex; public: void display() { cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl; } }; stud stud1,stud2;現在聲明了display函數是公用的,外界就可以調用該函數了。 介紹在面向對象程序設計中的幾個名詞,類中的成員函數稱為方法,方法是對數據的操作,一個方法對應一種操作。顯然只有被聲明為public的方法(成員函數)才能被對象外界所激活。外界是通過發消息來激活有關方法的。所謂消息,其實就是一個命令,由程序語句來實現的。例如想輸出對象stud1中的學生學號、姓名、性別等信息,可以在程序中寫
stud1.display();這就是向對象發出的一個消息,通知它執行display方法。 三個概念:對象 、方法、消息。
歸納以上對類型的聲明,可以得到其一般形式: class 類名 {private: 私有的數據和成員函數; public: 公用的數據和成員函數; };
1、構造函數 在建立一個對象時,常常需要作某些初始化的工作(例如對數據賦予初值),C++提供了一種特殊的成員函數–構造函數(constructor),這種函數與其他成員不同,不需要用戶發消息來激活它,而是在建立對象時自動執行,構造函數是由用戶定義的,它必須與類名同名,以便系統能識別它并把它作為構造函數。現在我們在前面聲明的類中加入構造函數。
class stud //聲明一個類,以class開頭{private: //私有的數據和成員函數 int num; char name[10]; char sex; //以上三行是數據成員 public: //公用的數據和成員函數 stud() //定義構造函數,函數名與類名相同 {num=10010' strcpy(name,"Wang_li"); sex='F';} //給數據賦初值void display() //這是成員函數{cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl;}};stud stud1; //在定義對象stud1時自動執行構造函數;==注意:構造函數不需要用戶調用,而是在定義一個對象時系統自動執行,而且只能執行一次。構造函數一般聲明為public,無返回值,也不需要加void類型聲明。
#include<string.h>#include<iostream.h>void main(){ class stud { private: int num; char name[10]; char sex; public: stud() {num=10010; strcpy(name,"Wang_li"); sex='F';} void display() {cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl;} }; stud stud1; stud1.display(); //cout<<stud1.num;}如果要建立兩個對象,分別對數據賦予初值,就不能這樣定義構造函數stud了,因為它會使兩個學生的初值相同,例如姓名都是Wangli。應該分別賦予不同的初值,可將構造函數修改如下:
stud(int n,char nam[],char s){num=n; strcpy(name,nam); sex=s;}完整程序即為
#include<iostream.h>void main(){ class stud { private: int num; char name[10]; char sex; public: stud(int n,char nam[],char s)//定義構造函數,有形參 {num=n; strcpy(name,nam); sex=s; } void display() {cout<<"num:"<<num<<endl; cout<<"name:"<<name<<endl; cout<<"sex:"<<sex<<endl;} }; stud stud1(10010,"Wang_li",'f'),stud2(10011,"Zhang_fen",'m'); stud1.display(); stud2.display(); //cout<<stud1.num;}用戶也可以不定義構造函數,編譯系統會自動生成一個構造函數,該函數沒有參數,不進行任何操作。
構造函數也可以重載,下面是兩個重載函數:
stud()//定義構造函數,無形參 {num=10010; strcpy(name,"Wang_li"); sex='f'; } stud(int n,char nam[],char s)//定義構造函數,有形參 {num=n; strcpy(name,nam); sex=s; }新聞熱點
疑難解答
圖片精選