欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++基礎(chǔ) class、struct、union詳細(xì)

 更新時(shí)間:2021年09月29日 15:06:13   作者:xlu1997  
這篇文章主要 給大家介紹的是C++基礎(chǔ) class、struct、union,主要由三部分組成,分別是、類class、結(jié)構(gòu)體struct、共用體union,需要的朋友可以參考一下

1、類class

類是面向?qū)ο笾械奶匦裕赾中是沒有類的概念。通常用class來表示,cpp中有抽象類,但是沒有接口這種說法,cpp支持多繼承。

一個(gè)普通的類:

class Fruit
{
    private:
        
    public:
        Fruit();
        ~Fruit();
};

Fruit::Fruit()
{
}

Fruit::~Fruit()
{
}

構(gòu)造函數(shù)和析構(gòu)函數(shù):

其中Fruit()表示構(gòu)造函數(shù), ~Fruit()表示析構(gòu)函數(shù)。構(gòu)造函數(shù)用來創(chuàng)建對(duì)象,設(shè)置初始化參數(shù)。析構(gòu)函數(shù)在對(duì)象銷毀的時(shí)候執(zhí)行。

修飾符:

private:表示私有成員,外部不可訪問,只有自身類和友元函數(shù)可以訪問。
public:表示公共成員,外部可以訪問。
protected:表示保護(hù)成員,保護(hù)成員和私有成員相似,但是子類可以訪問保護(hù)成員。

類中的成員函數(shù):

我們?cè)陬愔袆?chuàng)建函數(shù)的時(shí)候,可以直接初始化,或者在類外部實(shí)現(xiàn):

class Fruit
{
    private:
        int count;
    public:
        Fruit();
        ~Fruit();

        void add(int i);

        //直接初始化
        int getCount(){
            return count;
        }
};

Fruit::Fruit()
{
    cout << "create fruit" << endl;
}

Fruit::~Fruit()
{
    cout <<"fruit deleted"<<endl;
}

//在類外部實(shí)現(xiàn)
void Fruit::add(int i){
    count = count + i;
}

友元函數(shù):

友元函數(shù)雖然可以在類中定義,但是它不屬于類的成員函數(shù),必須在類外部實(shí)現(xiàn)。它可以訪問定義類中的privateprotected成員。

友元類:友元類中的所有函數(shù)都是該類的友元。

#include <iostream>
using namespace std;

class Fruit
{
    private:
        int count = 0;
    public:
        Fruit();
        ~Fruit();

        // friend void printF(Fruit ft);
        friend void printF(Fruit &ft);
};

// void printF(Fruit ft){
//     cout << ft.count <<endl;
// }

void printF(Fruit &ft){
    cout << ft.count <<endl;
}

int main(){

    Fruit fruit;
    
    printF(fruit);

    return 0;
}

this指針: 類的成員函數(shù)中都可以用this指針來訪問類成員,this指針是const指針,不可修改。

虛函數(shù)、純虛函數(shù)、抽象類

虛函數(shù): 使用關(guān)鍵字virtual修飾

        virtual void fuck2(){
            cout <<"fuck 2"<<endl;
        }

虛函數(shù)表示被子類重寫的時(shí)候,調(diào)用子類的函數(shù)而不是父類的此函數(shù)

純虛函數(shù):空的虛函數(shù)

virtual void fuck() = 0;

抽象類: 只要類中有純虛函數(shù)就代表是抽象類

抽象類是被實(shí)體化的,必須通過子類創(chuàng)建。

class Fruit
{
    private:
    public:
        Fruit();
        ~Fruit();
        virtual void fuck() = 0;

        void fuck1(){
            cout <<"fuck 1"<<endl;
        }

        virtual void fuck2(){
            cout <<"fuck 2"<<endl;
        }
};

繼承: 注意繼承需使用public修飾,

class Apple: public Fruit
{
    private:
        
    public:
        Apple();
        ~Apple();

        void fuck(){
            cout << "fuck apple"<<endl;
        };

        void fuck2(){
            cout << "fuck apple 22"<<endl;
        };

};

調(diào)用看輸出結(jié)果:

    Apple apple;
    apple.fuck();
    apple.fuck1();
    apple.fuck2();

輸出:

fuck apple
fuck 1
fuck apple 22

  • fuck()是純虛函數(shù),調(diào)用的是子類
  • fuck1()調(diào)用的是父類的方法
  • fuck2()因?yàn)槭翘摵瘮?shù),又被子類重寫了,所以調(diào)用的是子類。如果子類不重寫虛函數(shù),還是會(huì)調(diào)用父類的。

多繼承如下:

class Apple: public Fruit, public Orange{
    
}

2、結(jié)構(gòu)體struct

cpp可以用struct來創(chuàng)建自定義數(shù)據(jù)結(jié)構(gòu),相當(dāng)于java中的bean

創(chuàng)建一個(gè)基本的結(jié)構(gòu)體:

struct Book
{
    string name;
    int id;
    long int ISBN;
};

可以在} ;之間創(chuàng)建一個(gè)或多個(gè)結(jié)構(gòu)體對(duì)象:

struct Book
{
    string name;
    int id;
    long int ISBN;
}book1,book2;

數(shù)據(jù)局初始化:

  

  <!--直接賦值:-->
    book1.name = "C++ programing";

    <!--或者創(chuàng)建的時(shí)候初始化:-->
    Book book3{
        "Android++",
        1,
        21321231
    };

    cout<<book3.id<<endl;
    cout<<book3.name<<endl;
    cout<<book3.ISBN<<endl;

使用類型別名:

typedef struct{
    int id;
    string name;
}Ebook;

我感覺是無用的語法糖。

結(jié)構(gòu)體指針:

    Ebook ebook{
        2,"啊哈哈哈"
    };

    Ebook *ptr_book;
    ptr_book = &ebook;

    cout<< ptr_book->id <<endl;
    cout<< ptr_book->name <<endl;

和普通指針沒啥區(qū)別

結(jié)構(gòu)體和class的區(qū)別在哪里?

  • 總的來說,struct 更適合看成是一個(gè)數(shù)據(jù)結(jié)構(gòu)的實(shí)現(xiàn)體,class 更適合看成是一個(gè)對(duì)象的實(shí)現(xiàn)體。
  • 默認(rèn)的繼承訪問權(quán)限:struct 默認(rèn)是public的,class默認(rèn)是private的。

c和cpp中的struct有什么不同?

  • c中只能作為數(shù)據(jù)的結(jié)構(gòu)體,不能有函數(shù),cpp中struct是可以有函數(shù)的
  • c中沒有修飾符,cpp中結(jié)構(gòu)體可以有publicprotected、private修飾符
  • c中創(chuàng)建結(jié)構(gòu)體必須加struct前綴,比如:struct Book book,真是book思議
  • c中沒有繼承概念,cpp中struct可以繼承

演示:

struct TBook : public Book
{
    private:
        int ids = 1232342;
    public:
        string names;
        long int TTT;
        void printBook(TBook *book);
}tbook;

void TBook::printBook(TBook *book){
    cout<<book->ids<<endl;
    cout<<book->names<<endl;
    cout<<book->TTT<<endl;

    cout<<book->name<<endl;
}

執(zhí)行:

    tbook.name = "C++";
    tbook.names = "Android++";
    tbook.TTT = 1213;

    tbook.printBook(&tbook);

輸出結(jié)果:

1232342
Android++
1213
C++

3、共用體union

共用體類似于結(jié)構(gòu)體,但是只會(huì)同時(shí)存在一個(gè)數(shù)據(jù)成員,在一個(gè)成員被賦值后,其他成員值將會(huì)丟失。

union ONE
{
    int i;
    float j;
    double ids[10];
};

int main(){

    ONE one;
    one.i = 123;
    cout << one.i <<endl;

    one.j = 1.0f;
    cout << one.i <<endl;   //one.i將會(huì)丟失
    cout << one.j <<endl;

    return 0;
}

共用體特點(diǎn):

  • 默認(rèn)訪問控制符為 public
  • 可以含有構(gòu)造函數(shù)、析構(gòu)函數(shù)
  • 不能含有引用類型的成員
  • 不能繼承自其他類,不能作為基類
  • 不能含有虛函數(shù)
  • 匿名 union 在定義所在作用域可直接訪問 union 成員
  • 匿名 union 不能包含 protected 成員或 private 成員
  • 全局匿名聯(lián)合必須是靜態(tài)(static)的

配合結(jié)構(gòu)體使用:

struct PEOPLE
{
    string name;
    union TEST
    {
        int id;
        float id_f;
    } test;
    
};

到此這篇關(guān)于C++基礎(chǔ) class、struct、union詳細(xì)的文章就介紹到這了,更多相關(guān)C++基礎(chǔ) class、struct、union內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)掃雷小游戲

    C++實(shí)現(xiàn)掃雷小游戲

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)掃雷小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • C++獲取特定進(jìn)程CPU使用率的實(shí)現(xiàn)代碼

    C++獲取特定進(jìn)程CPU使用率的實(shí)現(xiàn)代碼

    寫一個(gè)小程序在后臺(tái)記錄每個(gè)進(jìn)程的CPU使用情況,揪出鎖屏后占用CPU的進(jìn)程,于是自己寫了一個(gè)C++類CPUusage,方便地監(jiān)視不同進(jìn)程的CPU占用情況。本人編程還只是個(gè)新手,如有問題請(qǐng)多多指教
    2019-04-04
  • C++實(shí)現(xiàn)循環(huán)隊(duì)列

    C++實(shí)現(xiàn)循環(huán)隊(duì)列

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)循環(huán)隊(duì)列,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • C++日期類(Date)實(shí)現(xiàn)的示例代碼

    C++日期類(Date)實(shí)現(xiàn)的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何利用C++語言實(shí)現(xiàn)日期類(Date),可以實(shí)現(xiàn)確定某年某月有多少天、打印日期等功能,感興趣的可以了解一下
    2022-07-07
  • C++段錯(cuò)誤(Segmentation fault)快速定位的解決方法

    C++段錯(cuò)誤(Segmentation fault)快速定位的解決方法

    寫過C++的朋友都知道,有時(shí)候程序編譯通過,并不能代表程序就是對(duì)的,在linux下做開發(fā)時(shí),經(jīng)常會(huì)遇到跑崩潰的情況,但是在終端只會(huì)報(bào)Segmentation fault,如果工程代碼量少,你還能重新debug一下慢慢找,本文給大家介紹了C++段錯(cuò)誤的快速定位,需要的朋友可以參考下
    2024-07-07
  • C語言數(shù)據(jù)結(jié)構(gòu)深入探索順序表

    C語言數(shù)據(jù)結(jié)構(gòu)深入探索順序表

    大家好,今天給大家?guī)淼氖琼樞虮?,我覺得順序表還是有比較難理解的地方的,于是我就把這一塊的內(nèi)容全部整理到了一起,希望能夠給剛剛進(jìn)行學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)的人帶來一些幫助,或者是已經(jīng)學(xué)過這塊的朋友們帶來更深的理解,我們現(xiàn)在就開始吧
    2022-05-05
  • C++中需要注意的細(xì)節(jié)你知道嗎

    C++中需要注意的細(xì)節(jié)你知道嗎

    這篇文章主要介紹了C++ 需要注意的幾點(diǎn)細(xì)節(jié),幫助大家更好的理解和學(xué)習(xí)C++,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-09-09
  • C語言編程C++自定義個(gè)性化類型

    C語言編程C++自定義個(gè)性化類型

    這篇文章主要介紹了C語言編程中如何來自定義C++個(gè)性化類型,文中附含詳細(xì)的示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-09-09
  • C語言實(shí)現(xiàn)排雷游戲(多文件)

    C語言實(shí)現(xiàn)排雷游戲(多文件)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)排雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • 解讀C++11 原生字符串

    解讀C++11 原生字符串

    這篇文章主要介紹了C++11 原生字符串的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)c++11,感興趣的朋友可以了解下
    2020-08-08

最新評(píng)論