最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解C++編程中類(lèi)的聲明和對(duì)象成員的引用

 更新時(shí)間:2015年09月16日 15:47:55   投稿:goldensun  
這篇文章主要介紹了詳解C++編程中類(lèi)的聲明和對(duì)象成員的引用,是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下

C++類(lèi)的聲明和對(duì)象的創(chuàng)建
類(lèi)是創(chuàng)建對(duì)象的模板,一個(gè)類(lèi)可以創(chuàng)建多個(gè)對(duì)象,每個(gè)對(duì)象都是類(lèi)類(lèi)型的一個(gè)變量;創(chuàng)建對(duì)象的過(guò)程也叫類(lèi)的實(shí)例化。每個(gè)對(duì)象都是類(lèi)的一個(gè)具體實(shí)例(Instance),擁有類(lèi)的成員變量和成員函數(shù)。

與結(jié)構(gòu)體一樣,類(lèi)只是一種復(fù)雜數(shù)據(jù)類(lèi)型的聲明,不占用內(nèi)存空間。而對(duì)象是類(lèi)這種數(shù)據(jù)類(lèi)型的一個(gè)變量,占用內(nèi)存空間。
類(lèi)的聲明

類(lèi)是用戶自定義的類(lèi)型,如果程序中要用到類(lèi),必須先進(jìn)行聲明,或者使用已存在的類(lèi)(別人寫(xiě)好的類(lèi)、標(biāo)準(zhǔn)庫(kù)中的類(lèi)等),C++語(yǔ)法本身并不提供現(xiàn)成的類(lèi)的名稱、結(jié)構(gòu)和內(nèi)容。

一個(gè)簡(jiǎn)單的類(lèi)的定義:

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

該例創(chuàng)建了一個(gè)Student類(lèi),它包含了3個(gè)成員變量和1個(gè)成員函數(shù)。

class是C++中的關(guān)鍵字,用于聲明一個(gè)類(lèi);緊接 class 關(guān)鍵字之后的是我們自定義的類(lèi)名 Student;由{ }包圍的是類(lèi)體。聲明類(lèi)時(shí)不能對(duì)成員變量進(jìn)行初始化,只有在創(chuàng)建對(duì)象以后才能賦值。

類(lèi)可以理解為一種新的數(shù)據(jù)類(lèi)型,該數(shù)據(jù)類(lèi)型的名稱是 Student。與 char、int、float 等基本數(shù)據(jù)類(lèi)型不同的是,Student 是一種復(fù)雜數(shù)據(jù)類(lèi)型,可以包含基本類(lèi)型,而且多了很多基本類(lèi)型中沒(méi)有的特性。
需要注意的是:在類(lèi)聲明的最后有一個(gè)分號(hào)(;),它是類(lèi)聲明的一部分,表示類(lèi)聲明結(jié)束了,不能省略。
創(chuàng)建對(duì)象

聲明了 Student 數(shù)據(jù)類(lèi)型之后,就可以用它來(lái)定義變量了,如:

Student LiLei; //創(chuàng)建對(duì)象


該語(yǔ)句聲明了一個(gè)名字為 LiLei、數(shù)據(jù)類(lèi)型為 Student 的變量。這和:

int a; //定義整形變量


語(yǔ)句定義了一個(gè)整型變量表達(dá)的意思是類(lèi)似的。而 LiLei 這個(gè)變量我們稱之為 Student 類(lèi)的對(duì)象。

在定義類(lèi)的對(duì)象時(shí),class 關(guān)鍵字可要可不要。但出于習(xí)慣我們通常都會(huì)省略掉class關(guān)鍵字,例如:

class Student LiLei; //正確
Student LiLei; //同樣正確

創(chuàng)建類(lèi)的對(duì)象時(shí),除了能定義單個(gè)變量以外,還可以定義一個(gè)數(shù)組或者指針。例如:

Student all_student[100];
Student *pointer;


第一條語(yǔ)句定義了一個(gè) all_student 數(shù)組,該數(shù)據(jù)擁有100個(gè)元素,每個(gè)元素都是 Student 類(lèi)型。第二條語(yǔ)句定義了一個(gè) Student 類(lèi)型的指針 pointer,該指針可以指向 Student 類(lèi)型的變量(對(duì)象),用法和普通指針一樣。
聲明類(lèi)的同時(shí)創(chuàng)建對(duì)象

和結(jié)構(gòu)體(struct)類(lèi)似,你可以先聲明類(lèi),然后再創(chuàng)建對(duì)象,也可以在聲明類(lèi)的同時(shí)創(chuàng)建對(duì)象。如下所示:

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

這個(gè)時(shí)候你也可以省略類(lèi)名,直接創(chuàng)建對(duì)象。如下所示:

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

直接定義對(duì)象,在C++中是合法的、允許的,但卻很少用,也不提倡用。

一個(gè)完整的示例:

#include <stdio.h>
//類(lèi)可以在所有函數(shù)之外定義
class Student{
public: //類(lèi)包含的變量
  char *name;
  int age;
  float score;
public: //類(lèi)包含的函數(shù)
  void say(){
    printf("%s的年齡是 %d,成績(jī)是 %f\n", name, age, score);
  }
};
int main(){
  //創(chuàng)建對(duì)象
  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;
}

運(yùn)行結(jié)果:

小明的年齡是 15,成績(jī)是 92.500000
李雷的年齡是 16,成績(jī)是 80.000000


public 是C++中的關(guān)鍵字,用來(lái)修飾成員變量和成員函數(shù),表示它們是公有的。我們將在下節(jié)詳細(xì)講解 public,這里只需要知道,只有 public 后面的成員變量和成員函數(shù)才能被創(chuàng)建的對(duì)象訪問(wèn)到。像本節(jié)開(kāi)頭的例子,沒(méi)有使用 public,那么創(chuàng)建對(duì)象后就不能使用任何成員。
main 函數(shù)中首先創(chuàng)建了一個(gè)對(duì)象 stu,然后又定義了一個(gè) Student 類(lèi)型的指針變量??梢园l(fā)現(xiàn),和結(jié)構(gòu)體(struct)類(lèi)似,一個(gè)對(duì)象通過(guò)成員選擇符”.“來(lái)訪問(wèn)成員變量和成員函數(shù),而指針變量通過(guò)指針操作符”->“來(lái)訪問(wèn)成員。

對(duì)象指針和結(jié)構(gòu)體指針類(lèi)似。

注意:對(duì)象指針指向的是一個(gè)具體的對(duì)象,而不是類(lèi)。下面的寫(xiě)法是錯(cuò)誤的:

Student *pt;
pt = &Student;

C++對(duì)象成員的引用
在程序中經(jīng)常需要訪問(wèn)對(duì)象中的成員。訪問(wèn)對(duì)象中的成員可以有3種方法:

  1. 通過(guò)對(duì)象名和成員運(yùn)算符訪問(wèn)對(duì)象中的成員;
  2. 通過(guò)指向?qū)ο蟮闹羔樤L問(wèn)對(duì)象中的成員;
  3. 通過(guò)對(duì)象的引用變量訪問(wèn)對(duì)象中的成員。

通過(guò)對(duì)象名和成員運(yùn)算符訪問(wèn)對(duì)象中的成員

例如在程序中可以寫(xiě)出以下語(yǔ)句:

  stud1.num=1001; //假設(shè)num已定義為公用的整型數(shù)據(jù)成員

表示將整數(shù)1001賦給對(duì)象stud1中的數(shù)據(jù)成員num。其中“.”是成員運(yùn)算符,用來(lái)對(duì)成員進(jìn)行限定,指明所訪問(wèn)的是哪一個(gè)對(duì)象中的成員。注意不能只寫(xiě)成員名而忽略對(duì)象名。

訪問(wèn)對(duì)象中成員的一般形式為:
    對(duì)象名.成員名
不僅可以在類(lèi)外引用對(duì)象的公用數(shù)據(jù)成員,而且還可以調(diào)用對(duì)象的公用成員函數(shù),但同樣必須指出對(duì)象名,如:

  stud1.display( ); //正確,調(diào)用對(duì)象stud1的公用成員函數(shù)
  display( ); //錯(cuò)誤,沒(méi)有指明是哪一個(gè)對(duì)象的display函數(shù)


由于沒(méi)有指明對(duì)象名,編譯時(shí)把display作為普通函數(shù)處理。應(yīng)該注意所訪問(wèn)的成員是公用的(public )還是私有的(private ),只能訪問(wèn)public成員,而不能訪問(wèn)private成員。如果已定義num為私有數(shù)據(jù)成員,下面的語(yǔ)句是錯(cuò)誤的:

  stud1.num=10101; //num是私有數(shù)據(jù)成員,不能被外界引用


在類(lèi)外只能調(diào)用公用的成員函數(shù)。在一個(gè)類(lèi)中應(yīng)當(dāng)至少有一個(gè)公用的成員函數(shù),作為對(duì)外的接口,否則就無(wú)法對(duì)對(duì)象進(jìn)行任何操作。
通過(guò)指向?qū)ο蟮闹羔樤L問(wèn)對(duì)象中的成員

前面已經(jīng)介紹了指向結(jié)構(gòu)體變量的指針(詳情請(qǐng)猛擊:指向結(jié)構(gòu)體變量的指針),可以通過(guò)指針引用結(jié)構(gòu)體中的成員。用指針訪問(wèn)對(duì)象中的成員的方法與此類(lèi)似。如果有以下程序段:

class Time
{
public : //數(shù)據(jù)成員是公用的
  int hour;
  int minute;
};
Time t, *p; //定義對(duì)象t和指針變量p
p=&t; //使p指向?qū)ο髏
cout<<p->hour; //輸出p指向的對(duì)象中的成員hour


在p指向t的前提下,p->hour,(*p).hour和t.hour三者等價(jià)。
通過(guò)對(duì)象的引用變量來(lái)訪問(wèn)對(duì)象中的成員

如果為一個(gè)對(duì)象定義了一個(gè)引用變量,它們是共占同一段存儲(chǔ)單元的,實(shí)際上它們是同一個(gè)對(duì)象,只是用不同的名字表示而已。因此完全可以通過(guò)引用變量來(lái)訪問(wèn)對(duì)象中的成員。

如果已聲明了Time類(lèi),并有以下定義語(yǔ)句:

  Time t1; //定義對(duì)象t1
  Time &t2=t1; //定義Time類(lèi)引用變量t2,并使之初始化為t1
  cout<<t2.hour; //輸出對(duì)象t1中的成員hour


由于t2與t1共占同一段存儲(chǔ)單元(即t2是t1的別名),因此t2.hour就是t1.hour。

相關(guān)文章

  • C++的數(shù)據(jù)類(lèi)型你真的了解嗎

    C++的數(shù)據(jù)類(lèi)型你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++的數(shù)據(jù)類(lèi)型,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • C/C++中虛基類(lèi)詳解及其作用介紹

    C/C++中虛基類(lèi)詳解及其作用介紹

    這篇文章主要介紹了C/C++中虛基類(lèi)的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • C++實(shí)現(xiàn)LeetCode(648.替換單詞)

    C++實(shí)現(xiàn)LeetCode(648.替換單詞)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(648.替換單詞),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++(STL庫(kù))之順序容器vector的使用

    C++(STL庫(kù))之順序容器vector的使用

    這篇文章主要介紹了C++(STL庫(kù))之順序容器vector的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • C++ 實(shí)現(xiàn)靜態(tài)鏈表的簡(jiǎn)單實(shí)例

    C++ 實(shí)現(xiàn)靜態(tài)鏈表的簡(jiǎn)單實(shí)例

    這篇文章主要介紹了C++ 實(shí)現(xiàn)靜態(tài)鏈表的簡(jiǎn)單實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Qt自定義美化滑動(dòng)條

    Qt自定義美化滑動(dòng)條

    這篇文章主要為大家詳細(xì)介紹了Qt自定義美化滑動(dòng)條的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-11-11
  • Linux系統(tǒng)下C語(yǔ)言中的標(biāo)準(zhǔn)IO總結(jié)

    Linux系統(tǒng)下C語(yǔ)言中的標(biāo)準(zhǔn)IO總結(jié)

    最近用到了C語(yǔ)言的標(biāo)準(zhǔn)IO庫(kù),由于對(duì)其中的一些細(xì)節(jié)不是非常清楚,導(dǎo)致了許多Bug,花了好長(zhǎng)時(shí)間來(lái)調(diào)試,所以在此做個(gè)筆記,這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)下C語(yǔ)言中標(biāo)準(zhǔn)IO的相關(guān)資料,需要的朋友可以參考下
    2024-01-01
  • C++中友元的實(shí)例詳解

    C++中友元的實(shí)例詳解

    這篇文章主要介紹了C++中友元的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能掌握友元的使用方法,需要的朋友可以參考下
    2017-09-09
  • c語(yǔ)言5個(gè)常用的排序算法實(shí)例代碼

    c語(yǔ)言5個(gè)常用的排序算法實(shí)例代碼

    這篇文章主要介紹了c語(yǔ)言5個(gè)常用的排序算法實(shí)例代碼,分享了相關(guān)代碼示例,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • C++深入了解模板的使用

    C++深入了解模板的使用

    這篇文章主要介紹了C++中模板(Template)的詳解及其作用介紹,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評(píng)論

德州市| 烟台市| 云霄县| 增城市| 沛县| 江永县| 两当县| 双辽市| 常宁市| 维西| 肥乡县| 高青县| 岳阳市| 琼海市| 鄂伦春自治旗| 鄢陵县| 巴东县| 铜鼓县| 临湘市| 兰州市| 澳门| 札达县| 山西省| 万安县| 沂水县| 高淳县| 山东| 龙陵县| 施甸县| 渝北区| 麻江县| 茂名市| 逊克县| 台南市| 筠连县| 芦溪县| 托克逊县| 田东县| 丹东市| 永昌县| 岳阳县|