激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - C++基礎 class、struct、union詳細

C++基礎 class、struct、union詳細

2022-01-17 15:22xlu1997 C/C++

這篇文章主要 給大家介紹的是C++基礎 class、struct、union,主要由三部分組成,分別是、類class、結構體struct、共用體union,需要的朋友可以參考一下

1、類class

類是面向對象中的特性,在c中是沒有類的概念。通常用class來表示,cpp中有抽象類,但是沒有接口這種說法,cpp支持多繼承。

一個普通的類:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Fruit
{
    private:
        
    public:
        Fruit();
        ~Fruit();
};
 
Fruit::Fruit()
{
}
 
Fruit::~Fruit()
{
}

構造函數和析構函數:

其中Fruit()表示構造函數, ~Fruit()表示析構函數。構造函數用來創建對象,設置初始化參數。析構函數在對象銷毀的時候執行。

修飾符:

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

類中的成員函數:

我們在類中創建函數的時候,可以直接初始化,或者在類外部實現:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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;
}
 
//在類外部實現
void Fruit::add(int i){
    count = count + i;
}

友元函數:

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

友元類:友元類中的所有函數都是該類的友元。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#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指針: 類的成員函數中都可以用this指針來訪問類成員,this指針是const指針,不可修改。

虛函數純虛函數抽象類

虛函數: 使用關鍵字virtual修飾

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

虛函數表示被子類重寫的時候,調用子類的函數而不是父類的此函數

純虛函數:空的虛函數

?
1
virtual void fuck() = 0;

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

抽象類是被實體化的,必須通過子類創建。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class Fruit
{
    private:
    public:
        Fruit();
        ~Fruit();
        virtual void fuck() = 0;
 
        void fuck1(){
            cout <<"fuck 1"<<endl;
        }
 
        virtual void fuck2(){
            cout <<"fuck 2"<<endl;
        }
};

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Apple: public Fruit
{
    private:
        
    public:
        Apple();
        ~Apple();
 
        void fuck(){
            cout << "fuck apple"<<endl;
        };
 
        void fuck2(){
            cout << "fuck apple 22"<<endl;
        };
 
};

調用看輸出結果:

?
1
2
3
4
Apple apple;
apple.fuck();
apple.fuck1();
apple.fuck2();

輸出:

fuck apple
fuck 1
fuck apple 22

  • fuck()是純虛函數,調用的是子類
  • fuck1()調用的是父類的方法
  • fuck2()因為是虛函數,又被子類重寫了,所以調用的是子類。如果子類不重寫虛函數,還是會調用父類的。
  •  

多繼承如下:

?
1
2
3
class Apple: public Fruit, public Orange{
    
}

2、結構體struct

cpp可以用struct來創建自定義數據結構,相當于java中的bean

創建一個基本的結構體:

?
1
2
3
4
5
6
struct Book
{
    string name;
    int id;
    long int ISBN;
};

可以在} ;之間創建一個或多個結構體對象:

?
1
2
3
4
5
6
struct Book
{
    string name;
    int id;
    long int ISBN;
}book1,book2;

數據局初始化:

  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
<!--直接賦值:-->
  book1.name = "C++ programing";
 
  <!--或者創建的時候初始化:-->
  Book book3{
      "Android++",
      1,
      21321231
  };
 
  cout<<book3.id<<endl;
  cout<<book3.name<<endl;
  cout<<book3.ISBN<<endl;

使用類型別名:

?
1
2
3
4
typedef struct{
    int id;
    string name;
}Ebook;

我感覺是無用的語法糖。

結構體指針:

?
1
2
3
4
5
6
7
8
9
Ebook ebook{
    2,"啊哈哈哈"
};
 
Ebook *ptr_book;
ptr_book = &ebook;
 
cout<< ptr_book->id <<endl;
cout<< ptr_book->name <<endl;

和普通指針沒啥區別

結構體和class的區別在哪里?

  • 總的來說,struct 更適合看成是一個數據結構的實現體,class 更適合看成是一個對象的實現體。
  • 默認的繼承訪問權限:struct 默認是public的,class默認是private的。

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

  • c中只能作為數據的結構體,不能有函數,cpp中struct是可以有函數的
  • c中沒有修飾符,cpp中結構體可以有publicprotectedprivate修飾符
  • c中創建結構體必須加struct前綴,比如:struct Book book,真是book思議
  • c中沒有繼承概念,cpp中struct可以繼承

演示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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;
}

執行:

?
1
2
3
4
5
tbook.name = "C++";
tbook.names = "Android++";
tbook.TTT = 1213;
 
tbook.printBook(&tbook);

輸出結果:

1232342
Android++
1213
C++

3、共用體union

共用體類似于結構體,但是只會同時存在一個數據成員,在一個成員被賦值后,其他成員值將會丟失。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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將會丟失
    cout << one.j <<endl;
 
    return 0;
}

共用體特點:

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

配合結構體使用:

?
1
2
3
4
5
6
7
8
9
10
struct PEOPLE
{
    string name;
    union TEST
    {
        int id;
        float id_f;
    } test;
    
};

到此這篇關于C++基礎 class、struct、union詳細的文章就介紹到這了,更多相關C++基礎 class、struct、union內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://juejin.cn/post/7012541007459778590

延伸 · 閱讀

精彩推薦
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 亚洲精品久久久久www | 精品国产一区二 | 国产精品伊人久久 | 久久成人国产精品 | 欧美黄色免费视频 | 久久99精品国产99久久6男男 | 国产成人在线一区 | 叉逼视频 | 欧美一级做性受免费大片免费 | 9999视频 | 精品免费在线视频 | 成人永久免费视频 | www国产成人免费观看视频,深夜成人网 | 男女无遮挡羞羞视频 | 国产精品久久久久久久久久三级 | 成人 精品| 日本xxxx色视频在线观看免费, | 一区二区三区四区视频在线观看 | 国产成人精品一区在线播放 | 伦一区二区三区中文字幕v亚洲 | 成人免费自拍视频 | 亚洲小视频在线观看,com | 欧美一级片 在线播放 | 未成年人在线观看 | 黑人操穴 | 羞羞视频免费观看入口 | 免费观看国产精品视频 | 亚洲福利视频52 | 性欧美暴力猛交69hd | 毛片在线视频免费观看 | 久久综合综合久久 | 精品一区视频 | 播色网| 国产正在播放 | 色婷婷综合久久久中文一区二区 | 成人福利网 | 九九热在线免费观看视频 | 羞羞答答影院 | 91九色视频在线播放 | 91久久99热青草国产 | 久久精品亚洲一区二区三区观看模式 |