C++類中一些常見的成員


注:以下為個人見解,有可能錯誤,歡迎批評指出!

C++的成員分類:

  • 按照成員在類中扮的角色分:

    數據成員、成員函數。

  • 按照成員自身的使用特性分://特性:特殊性質

    普通成員、靜態成員、常量成員、友元、對象成員

下以成員自身使用特性來分別介紹

一、普通成員

   即前面所學,不再做介紹。

二、靜態成員

  A.靜態數據成員

      定義格式:static 類型 數據成員名表;//數據成員名表即(一個到多個)變量

   說明:

    1. 一般在類中定義為私有成員、保護成員。
    2. 初始化(分配內存空間):應該在程序開始運行時即生成,必須在任何函數在外進行初始化。
      格式:類型 類名::靜態數據成員名=初值  //格式類似類外成員函數定義,static 不用管了,不允許使用
    3. 靜態數據成員在一個類(類是定義的對象的集合)中只有一個,屬於所有對象,為所有對象所共享。
      如:普通數據成員在一個類中可以有多。 ob1.x ob2.x 兩個x數據成員(同名)均屬於同一類。
    4. static 只是聲明用,在類外不允許再用static

   代碼:只為說明靜態數據成員的定義和初始化

    

1 #include<iostream>
2 using namespace std;
3 class counter
4 {
5     private:
6         static int count;//靜態數據成員的定義 7 };
8 int counter::count=100;//靜態數據成員的初始化

 

 

  B.靜態成員函數

      定義格式:在成員函數前加上static即可

   調用方法:

        ①類名::靜態成員函數名(實參表);

        ②對象名.靜態成員函數名(實參表);

        注:更偏愛①,更能說明靜態成員函數屬於類而不是屬於哪個對象。

   說明:

    1. 靜態成員函數只能專門訪問靜態數據成員。
    2. static 只是聲明用,在類外定義靜態成員函數時不允許再用static。
    3. 通常用靜態成員函數來處理靜態數據成員。

   代碼:只為說明靜態成員函數的定義

 1 #include<iostream>
 2 using namespace std;
 3 class simple
 4 {
 5     private:
 6         static int v1,v2,v3;
 7     public:
 8          static void sum(void)  //靜態成員函數的定義  
 9         {
10              v3=v1+v2;
11         }
12 };
13 int simple::v1=0;
14 int simple::v2=0;
15 int simple::v3(0);

 

 1 #include<iostream>
 2 using namespace std;
 3 class simple
 4 {
 5     private:
 6         static int v1,v2,v3;
 7     public:
 8         static void sum(void);  //靜態成員函數在類內的聲明
 9 };
10 int simple::v1=0;
11 int simple::v2=0;
12 int simple::v3(0);
13 void simple::sum(void)  //在類外的定義
14 {
15     v3=v1+v2; 
16 }

 

 三、常量成員

  常量成員(或對象)的關鍵就在常量二字,一經 定義 確定 ,其值不能更改。

  A.常量成員函數

     定義:與普通成員函數類似,在后加const(即使在類外定義也要加const)

     說明:

   1. 用於處理常量對象

   2. 可憑借const構成重載即使參數完全一樣。(注:重載是參數的不同)

  B.常量數據成員(C中學過、不再贅述

   定義:與普通數據成員類似,只需在成員名前加const即可,位置有兩個。

  C.常量對象(霧:大概率不是類中成員,在類外定義,除非是容器類)

   定義:與普通對象定義類似,只需在成員名前加const即可,位置有兩個。

   1. const Myclass ob;

   2. Myclass const ob; //Myclass 是類名

     說明:

   1. 常量對象定義時初始化后,數據成員的值不能更改。(常量性)

   2. 需要常量函數才可操作常量對象。

四、友元

  A.友元函數

  作用:實現了非該類的函數可以訪問該類的私有成員。

  注:訪問私有成員:只有該類的函數才可以訪問私有成員。

  方法:在類中聲明,寫上允許訪問私有成員的函數,前加friend

  

 1 #include<iostream>
 2 #include<string.h>
 3 using namespace std;
 4 class girl
 5 {
 6     private:
 7         char*name;
 8         int age;
 9     public:
10         girl(char*na,int n)
11         {
12             name=new char[strlen(na)+1];
13             if(name!=NULL)
14             {
15                 strcpy(name,na);
16             }
17             age=n;
18         }
19         ~girl(void)
20         {
21             delete []name;
22         }
23         friend void disp(girl&g); //此處為友元函數的聲明
24 } ;

  B.友元類

  作用:實現了非該類的某一類(例如類A)的所有函數可以訪問該類的私有成員。

  方法: eg.  friend class A;即為A中的所有成員函數均可以訪問該類的私有成員。

 五、容器類(包含對象成員)

  容器類:含對象成員的類稱為容器類

  A.容器類的構造函數

  類名(形參表):對象名1(參數表1),……,對象名n(參數表n)

  B.關於容器類的一些說明

   創建容器類時先執行對象成員的構造函數,再執行容器類的構造函數。

   析構時遵循先定義后釋放。

  代碼

 1 #include<string.h>
 2 #include<hdate.h>
 3 class person
 4 {
 5     private:
 6         char *name;
 7         char sex[2];
 8         Date birthday; //處理數據用已知的類,不必事事都到底層
 9     public:
10         person(*na,*s,int y,int m,int d):birthday(y,m,d) //容器類的構造函數
11         {
12             name=new char[strlen(na)+1];  //在容器類構造函數內部,不必對對象成員初始化(在對象所屬類已經初始化)
13             if(name!=NULL)
14             {
15                 strcpy(name,na)
16             }
17             strcpy(sex,s);
18         }
19         ~person(void)
20         {
21             delete []name;
22         }
23         char *get_name(void)
24         {
25             return(name);
26         }
27         char *get_sex(void)
28         {
29             return(sex);
30         }
31         int get_year(void)
32         {
33             return(birthday.get_year());
34         }
35         int get_month(void)
36         {
37             return(birthday.get_month());
38         }
39         int get_day(void)
40         {
41             return(birthday.get_day());
42         }
43         void print(void);
44 }
45 void person::print(void)
46 {
47     cout<<"姓名:"<<name<<endl;
48     cout<<"性別:"<<sex<<endl;
49     cout<<"出生日期:"<<birthday.get_year()<<"";
50     cout<<birthday.get_month()<<"";
51     cout<<birthday.get_day()<<""<<endl;
52 }
View Code

 

  

  

 


免責聲明!

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



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