欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

C++語(yǔ)言學(xué)習(xí)(三)——封裝(Encapsulation)-創(chuàng)新互聯(lián)

C++語(yǔ)言學(xué)習(xí)(三)——封裝(Encapsulation)

一、封裝簡(jiǎn)介

C語(yǔ)言等面向過程編程中,數(shù)據(jù)以及數(shù)據(jù)的相關(guān)操作函數(shù)都是分離的獨(dú)立個(gè)體;在C++等面向?qū)ο缶幊讨?,?shù)據(jù)以及數(shù)據(jù)的相關(guān)操作被設(shè)計(jì)為對(duì)象,對(duì)象包括屬性(數(shù)據(jù))和操作(函數(shù)),兩者共同構(gòu)成對(duì)象實(shí)體(即類實(shí)體)。面向?qū)ο缶幊淌钩绦蚋K化,更易讀易寫,提升了代碼重用到一個(gè)更高的層次。
面向?qū)ο缶幊讨校瑪?shù)據(jù)和數(shù)據(jù)的操作封裝為了對(duì)象。封裝可以隱藏實(shí)現(xiàn)細(xì)節(jié),使得代碼模塊化,是把過程和數(shù)據(jù)包圍起來(lái),對(duì)數(shù)據(jù)的訪問只能通過已定義的接口。
封裝是一種對(duì)外提供服務(wù)的模型,封裝模型是對(duì)世間萬(wàn)物的個(gè)體抽象。
封裝的訪問屬性如下:
訪問屬性 屬性 對(duì)象內(nèi)部 對(duì)象外部
public 公有 可訪問 可訪問
protected 保護(hù) 可訪問 不可訪問
private 私有 可訪問 不可訪問
C語(yǔ)言中,struct中所有行為和屬性都是public的(默認(rèn)),既可以使用接口,又可以直接訪問其內(nèi)部數(shù)據(jù),沒有屏蔽內(nèi)部數(shù)據(jù)。
C++語(yǔ)言中,強(qiáng)化了C語(yǔ)言的封裝特性,struct、class可以指定行為和屬性的訪問方式,對(duì)內(nèi)開放數(shù)據(jù),對(duì)外屏蔽數(shù)據(jù),對(duì)外提供接口。

為平和等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及平和網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都網(wǎng)站制作、網(wǎng)站建設(shè)、平和網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!

二、C語(yǔ)言的封裝

C語(yǔ)言中,通常使用模塊化進(jìn)行封裝。
stack的C語(yǔ)言實(shí)現(xiàn):

#include <stdio.h>
#include <string.h>

typedef struct stack
{
    char space[1024];
    int top;
}stack;

void stack_init(stack *st)
{
    st->top = 0;
    memset(&st->space, 0, sizeof(st->space));
}

int is_empty(stack *st)
{
    return st->top == 0;
}
int is_full(stack *st)
{
    return st->top == 1024;
}

char pop(stack *st)
{
    return st->space[--st->top];
}

void push(stack *st, char c)
{
    st->space[st->top++] = c;
}

int main(void)
{
    stack st;
    stack_init(&st);
    unsigned int i;
    for(i = 'a'; i < ('z' + 1); i++)
    {
        if(!is_full(&st))
            push(&st, i);
    }
    for(i = 'a'; i < ('z' + 1); i++)
    {
        printf("%c\n", pop(&st));
    }
    return 0;
}

C語(yǔ)言中封裝的struct的數(shù)據(jù)成員是可以被外部調(diào)用修改的。

三、C++語(yǔ)言的封裝

1、C++語(yǔ)言的封裝

C++語(yǔ)言強(qiáng)化了C語(yǔ)言的封裝,在類的表示法中定義了屬性和行為的訪問級(jí)別。
C++語(yǔ)言中,用于表示類屬性的變量為成員變量;用于表示類行為的函數(shù)為成員函數(shù)。C++語(yǔ)言中,可以對(duì)類的成員變量和成員函數(shù)定義訪問級(jí)別。
public:使用public關(guān)鍵字聲明的類的成員變量和成員函數(shù)可以在類的內(nèi)部和外部訪問與調(diào)用
private:使用private關(guān)鍵字聲明的類的成員變量和成員函數(shù)只能在類的內(nèi)部訪問和調(diào)用
protected:使用protected關(guān)鍵字聲明的類的成員變量和成員函數(shù)只能在本類以及派生子類的內(nèi)部訪問和調(diào)用。
類的成員的作用域只在類的內(nèi)部,外部不能直接訪問。類的成員函數(shù)可以直接訪問成員變量和調(diào)用成員函數(shù)。類的外部可以通過類對(duì)象訪問public成員。
C++語(yǔ)言中,struct定義的類中成員的默認(rèn)訪問權(quán)限為public,class定義的類中成員的默認(rèn)訪問權(quán)限為private。

2、C++語(yǔ)言的struct

C++語(yǔ)言中,對(duì)struct關(guān)鍵字進(jìn)行了擴(kuò)展,struct已經(jīng)不只是C語(yǔ)言中變量集合的struct,C++語(yǔ)言中的struct不僅可以定義成員函數(shù),也可以實(shí)現(xiàn)繼承和多態(tài)。與C語(yǔ)言中的struct一樣,C++語(yǔ)言中使用struct定義類時(shí),成員的默認(rèn)訪問級(jí)別為public。

#include <iostream>

using namespace std;

struct Person
{
    const char* name;
    int age;
    virtual void print()
    {
        printf("My name is %s, I'm is %d years old.\n",name,age);
    }
};
//默認(rèn)繼承訪問權(quán)限為public
struct Student : Person
{
    void print()
    {
        printf("My name is %s, I'm is %d years old."
               "My score is %d\n",name,age,score);
    }
    void setScore(const int n)
    {
        score = n;
    }
private:
    int score;
};

int main(int argc, char *argv[])
{
    Person p;
    p.name = "Bob";
    p.age = 30;
    p.print();
    Student s;
    s.name = "Bauer";
    s.age = 20;
    s.setScore(98);
    s.print();
    dynamic_cast<Person*>(&s)->print();
    return 0;
}

3、C++語(yǔ)言的class

由于C++語(yǔ)言的struct需要兼容C語(yǔ)言的struct,C++語(yǔ)言使用新的class關(guān)鍵字定義類。使用class定義類時(shí),成員的默認(rèn)訪問級(jí)別為private。
C++中的類支持聲明和實(shí)現(xiàn)的分離,將類的定義和實(shí)現(xiàn)分開,通常.h頭文件中只有類的聲明,包括成員變量和成員函數(shù)的聲明;.cpp源文件中完成類的成員函數(shù)的實(shí)現(xiàn)。

#include <iostream>

using namespace std;

class Person
{
public:
    const char* name;
    int age;
    virtual void print()
    {
        printf("My name is %s, I'm is %d years old.\n",name,age);
    }
};

class Student : public Person
{
public:
    void print()
    {
        printf("My name is %s, I'm is %d years old."
               "My score is %d\n",name,age,score);
    }
    void setScore(const int n)
    {
        score = n;
    }
private:
    int score;
};

int main(int argc, char *argv[])
{
    Person p;
    p.name = "Bob";
    p.age = 30;
    p.print();
    Student s;
    s.name = "Bauer";
    s.age = 20;
    s.setScore(98);
    s.print();
    dynamic_cast<Person*>(&s)->print();
    return 0;
}

4、C++語(yǔ)言struct與class的區(qū)別

C++語(yǔ)言中struct與class最本質(zhì)的區(qū)別如下:
A、默認(rèn)訪問權(quán)限不同。struct默認(rèn)的訪問權(quán)限是public的,class默認(rèn)的訪問權(quán)限是private的。
B、默認(rèn)繼承訪問權(quán)限不同。struct默認(rèn)的繼承訪問權(quán)限是public的,class默認(rèn)的繼承訪問權(quán)限是private的。
C、class可用作定義模板參數(shù)的關(guān)鍵字,而struct不可以。
C++語(yǔ)言中,繼承時(shí)如果沒有指定繼承訪問權(quán)限,默認(rèn)繼承訪問權(quán)限是public繼承還是private繼承,取決于子類而不是基類。struct可以繼承class,class也可以繼承struct,默認(rèn)的繼承訪問權(quán)限取決于子類是struct還是class,如果子類使用struct聲明,默認(rèn)繼承訪問權(quán)限是public;如果子類使用class聲明,默認(rèn)繼承訪問權(quán)限是private。

#include <iostream>

using namespace std;

class Person
{
public:
    const char* name;
    int age;
    virtual void print()
    {
        printf("My name is %s, I'm is %d years old.\n",name,age);
    }
};
//默認(rèn)繼承訪問權(quán)限為public
struct Student : public Person
{
public:
    void print()
    {
        printf("My name is %s, I'm is %d years old."
               "My score is %d\n",name,age,score);
    }
    void setScore(const int n)
    {
        score = n;
    }
private:
    int score;
};

int main(int argc, char *argv[])
{
    Person p;
    p.name = "Bob";
    p.age = 30;
    p.print();
    Student s;
    s.name = "Bauer";
    s.age = 20;
    s.setScore(98);
    s.print();
    dynamic_cast<Person*>(&s)->print();
    return 0;
}

5、C++語(yǔ)言封裝示例

C++類實(shí)現(xiàn)stack:
stack.h源碼:

#ifndef STACK_H
#define STACK_H

class stack
{
public:
    stack();
    bool is_empty();
    bool is_full();
    void push(char c);
    char pop();
private:
    char space[1024];
    unsigned int top;
};

#endif // STACK_H

stack.cpp源碼:

#include "stack.h"
#include <string.h>

stack::stack()
{
    top = 0;
    memset(space, 0, sizeof(space));
}

bool stack::is_empty()
{
    return top == 0;
}

bool stack::is_full()
{
    return top == 1024;
}

void stack::push(char c)
{
    space[top++] = c;
}

char stack::pop()
{
    return space[--top];
}

main.cpp源碼:

#include <iostream>
#include "stack.h"
#include <string.h>
using namespace std;

int main()
{
    stack st;
    unsigned int i;
    for(i = 'a'; i < 'z' + 1; i++)
    {
        if(!st.is_full())
            st.push(i);
    }
    for(i = 'a'; i < 'z' + 1; i++)
    {
        cout<<st.pop()<<endl;
    }
    return 0;
}

C++語(yǔ)言中封裝的class stack中數(shù)據(jù)成員是private的,對(duì)于外部不可訪問,通過設(shè)置數(shù)據(jù)成員和操作方法的訪問權(quán)限,可以對(duì)外部開放、屏蔽數(shù)據(jù)成員和操作方法。C++通過定義類成員的訪問級(jí)別實(shí)現(xiàn)封裝機(jī)制。C++語(yǔ)言中類支持聲明和實(shí)現(xiàn)的分離,在頭文件中聲明類,在源文件中實(shí)現(xiàn)類。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

本文標(biāo)題:C++語(yǔ)言學(xué)習(xí)(三)——封裝(Encapsulation)-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://aaarwkj.com/article26/pgpjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、品牌網(wǎng)站制作、移動(dòng)網(wǎng)站建設(shè)、標(biāo)簽優(yōu)化小程序開發(fā)、商城網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
全部网站免费在线观看等| 在线一区免费视频播放| 日本一区二区电影大全| 国产一区二区精品日韩| 欧美aⅴ一区二区三区| 亚洲熟妇av乱码在线| 香蕉伊蕉伊中文在线视频| 免费亚洲老熟熟女熟女熟女| 欧美一级免费黄片在线播放| 91精品国产老熟女在线| 国产精品欧美久久久久无| 日韩av熟女中文字幕| 日韩精品在线观看一| 中文字幕一区二区三区精彩视频| 黄色大片黄色大片黄色大片| 亚洲av二区三区成人| 国产免费播放一区二区三区| 欧美另类亚洲综合久青草 | 亚洲欧美日韩精品在线观看| 国产第一页国产第一页| 亚洲精品一区二区三区三州| 免费国产三级在线观看| 午夜伦理视频免费观看| 女人天堂网av免费看| 在线免费观看成人午夜福利| 国产成人免费视频一区| 国产自拍偷拍自拍偷拍| 加勒比人妻一区二区三区| 福利视频一区二区视频| 日本精品一区二区三区免费| 亚洲欧美一区二区国产| 国产亚洲一区二区三区在线| 国产三级一区二区不卡| 中国亚洲视频一区二区| 九九在线视频免费观看精彩| 亚洲精品成人一区不卡| 国产又粗又长又大无遮挡| 亭亭丁香激情五月涩久久 | 日韩电影一区二区在线观看中文字幕| 国产成人精品免费视频大| 在线亚洲精品一区二区|