程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 詳解C++編程中類的聲明和對象成員的援用

詳解C++編程中類的聲明和對象成員的援用

編輯:關於C++

詳解C++編程中類的聲明和對象成員的援用。本站提示廣大學習愛好者:(詳解C++編程中類的聲明和對象成員的援用)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解C++編程中類的聲明和對象成員的援用正文


C++類的聲明和對象的創立
類是創立對象的模板,一個類可以創立多個對象,每一個對象都是類類型的一個變量;創立對象的進程也叫類的實例化。每一個對象都是類的一個詳細實例(Instance),具有類的成員變量和成員函數。

與構造體一樣,類只是一種龐雜數據類型的聲明,不占用內存空間。而對象是類這類數據類型的一個變量,占用內存空間。
類的聲明

類是用戶自界說的類型,假如法式中要用到類,必需先輩行聲明,或許應用已存在的類(他人寫好的類、尺度庫中的類等),C++語法自己其實不供給現成的類的稱號、構造和內容。

一個簡略的類的界說:

class Student{
  //成員變量
  char *name;
  int age;
  float score;
  //成員函數
  void say(){
    printf("%s的年紀是 %d,成就是 %f\n", name, age, score);
  }
};

該例創立了一個Student類,它包括了3個成員變量和1個成員函數。

class是C++中的症結字,用於聲明一個類;緊接 class 症結字以後的是我們自界說的類名 Student;由{ }包抄的是類體。聲明類時不克不及對成員變量停止初始化,只要在創立對象今後能力賦值。

類可以懂得為一種新的數據類型,該數據類型的稱號是 Student。與 char、int、float 等根本數據類型分歧的是,Student 是一種龐雜數據類型,可以包括根本類型,並且多了許多根本類型中沒有的特征。
須要留意的是:在類聲明的最初有一個分號(;),它是類聲明的一部門,表現類聲明停止了,不克不及省略。
創立對象

聲清楚明了 Student 數據類型以後,便可以用它來界說變量了,如:

Student LiLei; //創立對象


該語句聲清楚明了一個名字為 LiLei、數據類型為 Student 的變量。這和:

int a; //界說整形變量


語句界說了一個整型變量表達的意思是相似的。而 LiLei 這個變量我們稱之為 Student 類的對象。

在界說類的對象時,class 症結字可要可不要。但出於習氣我們平日都邑省略失落class症結字,例如:

class Student LiLei; //准確
Student LiLei; //異樣准確

創立類的對象時,除能界說單個變量之外,還可以界說一個數組或許指針。例如:

Student all_student[100];
Student *pointer;


第一條語句界說了一個 all_student 數組,該數據具有100個元素,每一個元素都是 Student 類型。第二條語句界說了一個 Student 類型的指針 pointer,該指針可以指向 Student 類型的變量(對象),用法和通俗指針一樣。
聲明類的同時創立對象

和構造體(struct)相似,你可以先聲明類,然後再創立對象,也能夠在聲明類的同時創立對象。以下所示:

class Student{
  //成員變量
  char *name;
  int age;
  float score;
  //成員函數
  void say(){
    printf("%s的年紀是 %d,成就是 %f\n", name, age, score);
  }
}stu1, stu2;

這個時刻你也能夠省略類名,直接創立對象。以下所示:

class{
  //成員變量
  char *name;
  int age;
  float score;
  //成員函數
  void say(){
    printf("%s的年紀是 %d,成就是 %f\n", name, age, score);
  }
}stu1, stu2;

直接界說對象,在C++中是正當的、許可的,但卻很罕用,也不倡導用。

一個完全的示例:

#include <stdio.h>
//類可以在一切函數以外界說
class Student{
public: //類包括的變量
  char *name;
  int age;
  float score;
public: //類包括的函數
  void say(){
    printf("%s的年紀是 %d,成就是 %f\n", name, age, score);
  }
};
int main(){
  //創立對象
  Student stu;
  stu.name = "小明";
  stu.age = 15;
  stu.score = 92.5f;
  stu.say();
  //界說指針
  Student *pt_stu = &stu;
  pt_stu->name = "李雷";
  pt_stu->age = 16;
  pt_stu->score = 80;
  pt_stu->say();
  return 0;
}

運轉成果:

小明的年紀是 15,成就是 92.500000
李雷的年紀是 16,成就是 80.000000


public 是C++中的症結字,用來潤飾成員變量和成員函數,表現它們是私有的。我們將鄙人節具體講授 public,這裡只須要曉得,只要 public 前面的成員變量和成員函數能力被創立的對象拜訪到。像本節開首的例子,沒有應用 public,那末創立對象後就不克不及應用任何成員。
main 函數中起首創立了一個對象 stu,然後又界說了一個 Student 類型的指針變量。可以發明,和構造體(struct)相似,一個對象經由過程成員選擇符”.“來拜訪成員變量和成員函數,而指針變量經由過程指針操作符”->“來拜訪成員。

對象指針和構造體指針相似。

留意:對象指針指向的是一個詳細的對象,而不是類。上面的寫法是毛病的:

Student *pt;
pt = &Student;

C++對象成員的援用
在法式中常常須要拜訪對象中的成員。拜訪對象中的成員可以有3種辦法:

  1. 經由過程對象名和成員運算符拜訪對象中的成員;
  2. 經由過程指向對象的指針拜訪對象中的成員;
  3. 經由過程對象的援用變量拜訪對象中的成員。
  4. 經由過程對象名和成員運算符拜訪對象中的成員

    例如在法式中可以寫出以下語句:

      stud1.num=1001; //假定num已界說為公用的整型數據成員
    

    表現將整數1001賦給對象stud1中的數據成員num。個中“.”是成員運算符,用來對成員停止限制,指明所拜訪的是哪個對象中的成員。留意不克不及只寫成員名而疏忽對象名。

    拜訪對象中成員的普通情勢為:
        對象名.成員名
    不只可以在類外援用對象的公用數據成員,並且還可以挪用對象的公用成員函數,但異樣必需指出對象名,如:

      stud1.display( ); //准確,挪用對象stud1的公用成員函數
      display( ); //毛病,沒有指明是哪個對象的display函數


    因為沒有指明對象名,編譯時把display作為通俗函數處置。應當留意所拜訪的成員是公用的(public )照樣公有的(private ),只能拜訪public成員,而不克不及拜訪private成員。假如已界說num為公有數據成員,上面的語句是毛病的:

      stud1.num=10101; //num是公有數據成員,不克不及被外界援用


    在類外只能挪用公用的成員函數。在一個類中應該至多有一個公用的成員函數,作為對外的接口,不然就沒法對對象停止任何操作。
    經由過程指向對象的指針拜訪對象中的成員

    後面曾經引見了指向構造體變量的指針(概況請猛擊:指向構造體變量的指針),可以經由過程指針援用構造體中的成員。用指針拜訪對象中的成員的辦法與此相似。假如有以下法式段:

    class Time
    {
    public : //數據成員是公用的
      int hour;
      int minute;
    };
    Time t, *p; //界說對象t和指針變量p
    p=&t; //使p指向對象t
    cout<<p->hour; //輸入p指向的對象中的成員hour


    在p指向t的條件下,p->hour,(*p).hour和t.hour三者等價。
    經由過程對象的援用變量來拜訪對象中的成員

    假如為一個對象界說了一個援用變量,它們是共占統一段存儲單位的,現實上它們是統一個對象,只是用分歧的名字表現罷了。是以完整可以經由過程援用變量來拜訪對象中的成員。

    假如已聲清楚明了Time類,並有以下界說語句:

      Time t1; //界說對象t1
      Time &t2=t1; //界說Time類援用變量t2,並使之初始化為t1
      cout<<t2.hour; //輸入對象t1中的成員hour


    因為t2與t1共占統一段存儲單位(即t2是t1的別號),是以t2.hour就是t1.hour。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved