国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

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

2020-01-26 14:52:19
字體:
來源:轉載
供稿:網友

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. 通過對象的引用變量訪問對象中的成員。

通過對象名和成員運算符訪問對象中的成員

例如在程序中可以寫出以下語句:

  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和指針變量pp=&t; //使p指向對象tcout<<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。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴塘县| 航空| 思茅市| 临颍县| 周至县| 土默特左旗| 泽普县| 武鸣县| 绩溪县| 温宿县| 新竹市| 遵化市| 广州市| 常熟市| 石楼县| 尖扎县| 贵阳市| 长汀县| 万年县| 安化县| 吴桥县| 钟山县| 定陶县| 玉树县| 翁牛特旗| 石门县| 夏津县| 兴业县| 和平区| 靖江市| 兴安盟| 余庆县| 大城县| 博乐市| 湛江市| 曲阳县| 广水市| 明水县| 商洛市| 台安县| 高青县|