国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

『C++成長記』類和對象

這篇具有很好參考價值的文章主要介紹了『C++成長記』類和對象。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

『C++成長記』類和對象,C++,c++,開發(fā)語言,c語言,數(shù)據(jù)結(jié)構(gòu),算法

???博客主頁:小王又困了

??系列專欄:C++

??人之為學(xué),不日近則日退?

??感謝大家點贊??收藏?評論??


目錄

一、類的引入

二、類的定義

三、類的訪問限定符

四、類的作用域

五、類的實例化

六、this指針

??6.1this指針的引出

??6.2 this指針的特性


???前言:

??面向過程

? ? ?C語言是面向過程的,關(guān)注的是過程,分析出求解問題的步驟,通過函數(shù)調(diào)用逐步解決問題。用洗衣服舉例。

『C++成長記』類和對象,C++,c++,開發(fā)語言,c語言,數(shù)據(jù)結(jié)構(gòu),算法

??面向?qū)ο?/span>

? ? ?C++是基于面向?qū)ο蟮?,關(guān)注的是對象,將一件事情拆分成不同的對象,靠對象之間的交互完 成。對于洗衣服這件事,C++設(shè)置了四個對象:人、衣服、洗衣粉、洗衣機。整個洗衣服的過程就變成了:人將衣服放進洗衣機、倒入洗衣粉、啟動洗衣機,洗衣機就會完成洗衣過程并甩干。整個洗衣服的過程,是人、衣服、洗衣粉、洗衣機四個對象之間交互完成的,人不需要關(guān)心洗衣機具體是如何洗衣服的。

『C++成長記』類和對象,C++,c++,開發(fā)語言,c語言,數(shù)據(jù)結(jié)構(gòu),算法

一、類的引入

? ? ?C語言結(jié)構(gòu)體中只能定義變量,在C++中,結(jié)構(gòu)體內(nèi)不僅可以定義變量,也可以定義函數(shù)。比如: 之前在數(shù)據(jù)結(jié)構(gòu)初階中,用C語言方式實現(xiàn)的棧,結(jié)構(gòu)體中只能定義變量;現(xiàn)在以C++方式實現(xiàn), 會發(fā)現(xiàn)struct中也可以定義函數(shù)。

??C語言版

struct Stack
{
    int* arr;
    int capacity;
    int size;
};

struct Stack s;//聲明一個結(jié)構(gòu)體變量

void StackInit(struct Stack* ps);

void StackPush(struct Stack* ps,int x);

? ? ?在C語言中,數(shù)據(jù)和方法分離,傳遞參數(shù)才能訪問數(shù)據(jù),沒有對類型重定義只能寫成struct Stack。函數(shù)名必須區(qū)分,要寫成StackInit,在一個程序中如果有別的結(jié)構(gòu),例如:鏈表,就無法區(qū)分。

??C++版

struct Stack
{
    //函數(shù)
    void Init()
    {}
 	void Push()
    {}

    //變量
    int* arr;
    int capacity;
    int size;
};

? ? ?在C++中,類名就是類型,不需要加struct,而且不僅可以定義變量,還可以定義函數(shù)。變量可以通過.去調(diào)用類里面的函數(shù)。

二、類的定義

class className
{
	//類體:由成員變量和成員函數(shù)組成
};

? ? ?class為定義類的關(guān)鍵字,ClassName為類的名字,{}中為類的主體,注意類定義結(jié)束時后面分號不能省略。

類體中內(nèi)容稱為類的成員:類中的變量稱為類的屬性或成員變量; 類中的函數(shù)稱為類的方法或者成員函數(shù)。

??類的兩種定義方式:

  • 聲明和定義全部放在類體中
//定義一個人的類
class Person
{
    //成員函數(shù)——顯式基本信息
    void showInfo()
    {
        cout << _name << "-" << _sex << "-" << _age << "-" << endl;
    }
    //成員變量
    char* _name;//姓名
    char* _sex;//性別
    int _age;//年齡
};

注意:成員函數(shù)如果在類中定義,編譯器可能會將其當成內(nèi)聯(lián)函數(shù)處理,最終是否真的是內(nèi)聯(lián),還是由編譯器說了算。

  • 類聲明放在.h文件中,成員函數(shù)定義放在.cpp文件中
Person.h文件
//定義一個人的類
class Person
{
    //成員函數(shù)——顯式基本信息
    void showInfo();

    //成員變量
    char* _name;//姓名
    char* _sex;//性別
    int _age;//年齡
};
Person.cpp文件
#include "Person.h"

void Person::showInfo()
{
    cout << _name << "-" << _sex << "-" << _age << "-" << endl;
}

注意:成員函數(shù)名前需要加類名: :,告訴編譯器這個函數(shù)屬于哪個類域。長的函數(shù)聲明和定義分離,短的函數(shù)在類中定義。

三、類的訪問限定符

? ? ?C++實現(xiàn)封裝的方式:用類將對象的屬性與方法結(jié)合在一塊,讓對象更加完善,通過訪問權(quán)限選擇性的將其接口提供給外部的用戶使用。C++提供了三種限制權(quán)限的訪問限定符:public、protected、private。

『C++成長記』類和對象,C++,c++,開發(fā)語言,c語言,數(shù)據(jù)結(jié)構(gòu),算法

??訪問限定符說明

  • public修飾的成員在類外可以直接被訪問(通過對象.訪問)
  • protectedprivate修飾的成員在類外不能直接被訪問(此處protected和private是類似的)
  • 訪問權(quán)限作用域從該訪問限定符出現(xiàn)的位置開始直到下一個訪問限定符出現(xiàn)時為止,如果后面沒有訪問限定符,作用域就到 } 即類結(jié)束。
  • 如果后面沒有訪問限定符,作用域就到 } 即類結(jié)束。
  • class的默認訪問權(quán)限為private,struct的默認訪問權(quán)限為public(因為struct要兼容C)
  • 訪問限定符可以修飾類中的成員變量、成員函數(shù)、內(nèi)部類、重命名類型。友元函數(shù)的聲明不受訪問限定符的限制。

注意:類定義數(shù)據(jù)一般是私有的 。

四、類的作用域

? ? ?類定義了一個新的作用域,類的所有成員都在類的作用域中。在類體外定義成員時,需要::作用域限定符指明成員屬于哪個類域。不同的類域里面可以定義同名變量。

//定義一個人的類
class Person
{
    //成員函數(shù)
    void Person();
    //成員變量
    char* _name;//姓名
    char* _sex;//性別
    int _age;//年齡
};

// 這里需要指定PersonInfo是屬于Person這個類域
void Person::PersonInfo()
{
    cout << _name << "-" << _sex << "-" << _age << "-" << endl;
}

? ? ?如上面的成員函數(shù)PersonInfo,對于函數(shù)體中出現(xiàn)的變量_name等,編譯器會先在當前函數(shù)的局部域中搜索,如果沒有找到,接下來會到對應(yīng)的類域里面去搜索,當類域里面也沒有的時候,最后回到全局區(qū)搜索,如果全局也沒有,編譯就會報錯。

五、類的實例化

用類型創(chuàng)建對象的過程,稱為類的實例化。

? ? ?類是對對象進行描述的,是一個模型一樣的東西,限定了類有哪些成員,定義出一個類并沒有分配實際的內(nèi)存空間來存儲它。類和對象的關(guān)系可以看成,拿圖紙建房子的過程,圖紙就是類,建出來的一棟棟房子,就是一個個的對象。

? ? ?一個類可以實例化出多個對象,就像一個圖紙,可以建成很多房子一樣,實例化出的對象占用實際的物理空間,存儲類成員變量。

class Person
{
    //成員函數(shù)
    void Person::PersonInfo()
    
    //成員變量
    char* _name;//姓名
    char* _sex;//性別
    int _age;//年齡
};

int main()
{
    Person p1;//用類實例化一個對象p1
    Person p2;//用類實例化一個對象p2
    p1._name = "張三";
    p1._sex = "男";
    p1._age = 19;
    return 0;
}

六、this指針

??6.1this指針的引出

? ? ?我們先觀察下面的代碼?

class Date
{
public:
    void Init(int year, int month, int day)
    {
        _year = year;
        _month = month;
        _day = day;
    }
    void Print()
    {
        cout << _year << "-" << _month << "-" << _day << endl;
    }
private:
    int _year;     // 年
    int _month;    // 月
    int _day;      // 日
};

int main()
{
    Date d1, d2;//定義兩個日期類
    d1.Init(2022, 1, 11);//給d1初始化化
    d2.Init(2022, 1, 12);//給d2初始化
    d1.Print();//調(diào)用Print函數(shù)
    d2.Print();//調(diào)用Print函數(shù)
    return 0;
}

對于上述類,有這樣的一個問題:

Date類中有 Init Print 兩個成員函數(shù),函數(shù)體中沒有關(guān)于不同對象的區(qū)分,那當d1調(diào)用?Init 函數(shù)時,該函數(shù)是如何知道應(yīng)該設(shè)置d1對象,而不是設(shè)置d2對象呢?

C++中通過引入this指針解決該問題,即:C++編譯器給每個“非靜態(tài)的成員函數(shù)“增加了一個隱藏 的指針參數(shù),讓該指針指向當前對象(函數(shù)運行時調(diào)用該函數(shù)的對象),在函數(shù)體中所有“成員變量” 的操作,都是通過該指針去訪問。只不過所有的操作對用戶是透明的,即用戶不需要來傳遞,編 譯器自動完成。

    void Print()
    {
        cout << _year << "-" << _month << "-" << _day << endl;
    }


    void Print(Date* const this)
    {
        cout << this->_year << "-" << this->_month << "-" << this->_day << endl;
    }

??6.2 this指針的特性

  1. ?this指針的類型:類類型* const,即成員函數(shù)中,不能給this指針賦值。
  2. ?只能在“成員函數(shù)”的內(nèi)部使用.
  3. ?this指針本質(zhì)上是“成員函數(shù)”的形參,當對象調(diào)用成員函數(shù)時,將對象地址作為實參傳遞給 this形參。所以對象中不存儲this指針。
  4. ?this指針是“成員函數(shù)”第一個隱含的指針形參,一般情況由編譯器通過ecx寄存器自動傳 遞,不需要用戶傳遞。

本次的內(nèi)容到這里就結(jié)束啦。希望大家閱讀完可以有所收獲,同時也感謝各位讀者三連支持。文章有問題可以在評論區(qū)留言,博主一定認真認真修改,以后寫出更好的文章。你們的支持就是博主最大的動力。文章來源地址http://www.zghlxwxcb.cn/news/detail-755767.html

到了這里,關(guān)于『C++成長記』類和對象的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包