C++類和對象




一、C++結構體的新特征

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);
}

運行效果

在這里插入圖片描述

二、C++ 類和對象

我們先來做一個測試,修改一下book202.cpp的內容。

int st_girl::show()   // 結構體st_girl成員函數的定義

改為

int st_girl::show1()   // 結構體st_girl成員函數的定義

修改后再編譯。

在這里插入圖片描述

上圖中,方框內的文字“未在類st_girl中聲明”?我明明寫的是一個結構體,怎么成了類?

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運算符獲取占用內存的大小,但是,在實際開發中,程序員不太關心對象占用內存的大小。

七、小結

在這個階段,類就像一個有成員函數的結構體,定義的關鍵字和語法不同,使用方法完全相同。

各位可能會認為類好像沒什么用,不用類也可以活得很好,這不一定,因為我先用盡可能簡單的方式介紹類的基礎知識,如果把實際開發的場景搬到教材中,大家可能接受不了,在實際開發中,某些類的代碼非常長,類的聲明就有好幾頁,還不包括成員函數體。

希望各位保持好的心態,循序漸進的學習。

八、面向對象編程(Object Oriented Programming,OOP)

類是一個通用的概念,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)
作者:碼農有道

如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM