C語言的結構體不容許有函數,定義結構體變量的方法是:程序員
struct 結構體名 結構體變量名;
在C++中,結構體的成員能夠有函數,定義結構體變量能夠用:編程
結構體名 結構體變量名;
struct關鍵字能夠不書寫。數組
示例(book202.c)編程語言
/* * 程序名:book202.cpp,此程序用於演示C++結構體的新特徵。 * 做者:C語言技術網(www.freecplus.net) 日期:20190525 */ #include <stdio.h> #include <string.h> struct st_girl { char name[50]; // 姓名 int age; // 年齡 int height; // 身高,單位:釐米cm char sc[30]; // 身材,火辣;普通;飛機場。 char yz[30]; // 顏值,漂亮;通常;歪瓜裂棗。 int show(); // 聲明結構體成員函數show,用於顯示其它成員變量的值。 }; int main() { st_girl stgirl; // struct關鍵定能夠不書寫 memset(&stgirl,0,sizeof(stgirl)); strcpy(stgirl.name,"西施"); stgirl.age=22; stgirl.height=168; strcpy(stgirl.sc,"火辣"); strcpy(stgirl.yz,"漂亮"); stgirl.show(); // 調用結構體的成員函數 } int st_girl::show() // 結構體st_girl成員函數的定義 { printf("name=%s,age=%d,height=%d,sc=%s,yz=%s\n",name,age,height,sc,yz); }
運行效果ide
咱們先來作一個測試,修改一下book202.cpp的內容。函數
int st_girl::show() // 結構體st_girl成員函數的定義
改成學習
int st_girl::show1() // 結構體st_girl成員函數的定義
修改後再編譯。測試
上圖中,方框內的文字「未在類st_girl中聲明」?我明明寫的是一個結構體,怎麼成了類?.net
C++把結構體當作了類(class),類的成員能夠是變量和函數,經過類定義出來的變量也有特定的稱呼,叫作對象。指針
示例(book205.cpp)
/* * 程序名:book205.cpp,此程序演示用類的基本概念。 * 做者:C語言技術網(www.freecplus.net) 日期:20190525 */ #include <stdio.h> #include <string.h> class CGirl // 定義超女類 { public: char m_name[50]; // 姓名 int m_age; // 年齡 int m_height; // 身高,單位:釐米cm char m_sc[30]; // 身材,火辣;普通;飛機場。 char m_yz[30]; // 顏值,漂亮;通常;歪瓜裂棗。 int Show(); // 申明顯示超女基本信息的成員函數 }; int main() { CGirl Girl; // 實例化一個Girl對象 // 訪問對象的成員變量,進行賦值 strcpy(Girl.m_name,"武則天"); Girl.m_age=28; Girl.m_height=168; strcpy(Girl.m_sc,"火辣"); strcpy(Girl.m_yz,"漂亮"); Girl.Show(); // 調用對象的成員函數 } int CGirl::Show() // 顯示超女基本信息的成員函數體 { printf("姓名:%s,年齡:%d,身高:%d,身材:%s,顏值:%s。\n",m_name,m_age,m_height,m_sc,m_yz); }
運行效果
解釋一下book205.cpp。
class是C++的關鍵字,用於定義類,就像結構體中的sturct。
public也是C++中的關鍵字,各位先忽略它,後面再講解,先這麼抄就行。
類的成員變量和結構體成員變量同樣,也有數據類型和名稱。
int CGirl::Show()是類的成員函數的定義,在函數前加上類的名稱和兩個冒號,表示該函數是這個類的成員函數,類的成員函數的返回值、參數等語法與普通函數相同。
在C++中,用類定義一個類的變量叫作建立(或實例化)一個對象,成員變量稱爲類的屬性(property),成員函數稱爲類的方法(method)。
類的成員變量和成員函數的做用域和生命週期與對象的做用域和生命週期相同。
類能夠建立數組對象,就像結構體數組同樣。
CGirl Girl[10]; // 定義10個超女類數組 strcpy(Girl[0].m_name,"楊玉環"); Girl[0].m_age=18; ...... strcpy(Girl[9].m_name,"陳圓圓"); Girl[9].m_age=21;
類是一種自定義的數據類型,對象是內存變量,有內存地址,固然也就有類的指針,就像結構體的指針同樣。以下:
CGirl queen; CGirl *pst=&queen;
經過類指針能夠訪問對象的成員,書寫方法與結構體相同。
(*pointer).memberName
或者:
pointer->memberName
上面的兩種寫法是等效的,咱們一般採用後面的寫法,這樣更加直觀。
與結構體同樣,對象能夠做爲參數傳遞給函數,最好的方法固然是傳遞對象的地址。
按咱們之前的經驗,定義的變量使用前要初始化,C語言的基本數據類型能夠直接賦值0,字符串和結構體用memset函數初始化,那麼類的對象呢?對象不能用memset初始化,具體作法咱們之後再介紹。
對象能夠用sizeof運算符獲取佔用內存的大小,可是,在實際開發中,程序員不太關心對象佔用內存的大小。
在這個階段,類就像一個有成員函數的結構體,定義的關鍵字和語法不一樣,使用方法徹底相同。
各位可能會認爲類好像沒什麼用,不用類也能夠活得很好,這不必定,由於我先用盡量簡單的方式介紹類的基礎知識,若是把實際開發的場景搬到教材中,你們可能接受不了,在實際開發中,某些類的代碼很是長,類的聲明就有好幾頁,還不包括成員函數體。
但願各位保持好的心態,按部就班的學習。
類是一個通用的概念,C++、Java、C#、PHP等不少編程語言中都支持類,均可以經過類建立對象。由於 C++、Java、C#、PHP等語言都支持類和對象,因此使用這些語言編寫程序也被稱爲面向對象編程,這些語言也被稱爲面向對象的編程語言。C語言由於不支持類和對象的概念,被稱爲面向過程的編程語言,有點欺負人。
在C語言中,咱們會把重複使用或具備某項功能的代碼封裝成一個函數,而在C++中,多了一層封裝,就是類(class),不要小看類(class)這一層封裝,它有不少特性,極大地提升了程序員的開發效率。
面向對象編程在程序執行的效率上沒有任何優點,它的主要目的是方便程序員組織和管理代碼,快速梳理編程思路。
1)編寫程序,測試對象數組、對象指針、對象做爲函數的參數的用法。
2)參照book205.cpp程序,增長一個成員函數Level,Level函數根據超女資料,判斷超女的級別,級別的判斷標準以下:
妃子:(1)年齡18-25歲;(2)身高165-178cm;(3)身材火辣;(4)顏值漂亮。
宮女:(1)年齡18-30歲;(2)身高160-165cm;(3)身材火辣或者普通;(4)顏值通常。
雜役:(1)年齡35-40歲;(2)身高155-165cm;(3)身材普通或者飛機場;(4)顏值通常。
C語言技術網原創文章,轉載請說明文章的來源、做者和原文的連接。
來源:C語言技術網(www.freecplus.net)
做者:碼農有道
若是這篇文章對您有幫助,請點贊支持,或在您的博客中轉發個人文章,謝謝!!!若是文章有錯別字,或者內容有錯誤,或其餘的建議和意見,請您留言指正,很是感謝!!!