c語言入門到c++使用高手:深入學習C++之基本語言(五)

第二章 基本語言

第五節 結構、權限修飾符、類簡介

1. 結構回顧

  • 結構,自定義的數據類型
#include <iostream>
#include <cstring>

using namespace std;

typedef struct student {
    int number;
    char name[100];
} student;

//形參用結構變量
void func(student tmpstu) {
    tmpstu.number = 2000;
    strcpy(tmpstu.name, "Who");
}

void func1(student &tmpstu) {
    tmpstu.number = 2000;
    strcpy(tmpstu.name, "Who");
}
//用指向結構體的指針作爲函數傳遞
void func2(student *tmpstu) {
    tmpstu->number = 3000;
    strcpy(tmpstu->name, "WhoWho");
}


int main() {
    student stu1;
    strcpy(stu1.name, "Felaim");

    stu1.number = 1001;
    cout << stu1.name << endl;
    cout << stu1.number << endl;

//    值並沒有發生變化
//  效率很低,整個結構體都被進行拷貝
    func(stu1);
    cout << stu1.name << endl;
    cout << stu1.number << endl;

    func1(stu1);
    cout << stu1.name << endl;
    cout << stu1.number << endl;

    student *pstu;
    func2(pstu);
    cout << pstu->name << endl;
    cout << pstu->number << endl;
    return 0;
}

c++和c語言中的結構有什麼區別?

  • c++中結構具備了c語言結構的所有功能外,還增加了很多擴展功能,最突出的擴展功能是:
    不僅僅有成員變量,還可以定義成員函數(方法)
#include <iostream>
#include <cstring>

using namespace std;

typedef struct student {
    int number;
    char name[100];
    //成員函數也叫方法
    void func(){
        number++;
    }
} student;

//形參用結構變量
void func(student tmpstu) {
    tmpstu.number = 2000;
    strcpy(tmpstu.name, "Who");
}

int main() {
    student stu1;
    strcpy(stu1.name, "Felaim");

    stu1.number = 1001;
    cout << stu1.name << endl;
    cout << stu1.number << endl;

//    值並沒有發生變化
//  效率很低,整個結構體都被進行拷貝
    func(stu1);
    cout << stu1.name << endl;
    cout << stu1.number << endl;
    stu1.func();
    cout << stu1.number << endl;
    
    return 0;
}

2. public和private權限修飾符

  • public(公有), private(私有), protect(保護),本節介紹前兩種

  • public:公共的意思,用這個修飾符修飾結構/類中的成員變量或成員函數,就可以被外界訪問,一般我們需要被外界訪問的東西,就定義爲public

  • private: 私有的意思,用這個修飾符修飾結構/類中的成員變量或成員函數,只有內部定義的成員函數才能使用

#include <iostream>
#include <cstring>

using namespace std;

typedef struct student {
public://結構成員缺省都有public屬性
private:
    int number;
    char name[100];
public:
    //成員函數可以調用私有成員變量number
    void func() {
        number = 100;
        cout << number << endl;
    }
} student;

int main() {
    student stu1;
    // 如果定義成private之後,就無法調用
    strcpy(stu1.name, "Felaim");
    stu1.number = 1001;
    cout << stu1.name << endl;
    cout << stu1.number << endl;
    return 0;
}

3. 類簡介

  • 類也是用戶自定義的數據類型

  • 不管是c還是c++,結構都使用struct定義

結構和類到底有什麼區別?

  • 類只有在c++中才有的概念

  • 結構使用struct來定義,類用class中定義,在c中定義一個屬於該結構的變量,我們稱爲結構變量
    在c++中,我們定義一個屬於該類的變量,我們稱爲對象

  • 說白了結構變量也好,對象也好,它們都是一塊能夠存儲數據並且具有某種類型的內存空間

  • c++中結構和類極其相似,區別有兩點:

  1. c++結構內部的成員變量以及成員函數默認的訪問級別都是public屬性,
    c++類內部的成員變量以及成員函數默認的訪問級別是private

  2. c++結構體繼承默認的是public,c++類的繼承默認的都是private

  • 額外說明:
  1. 標準c++庫中包含大量豐富的類和函數, string, vector

4. 類的組織

  • 書寫規範:類的定義代碼放在頭文件中, 頭文件可以和類名相同,類的具體實現代碼放在.cpp文件中,實現的文件名也可以是類名,.cpp文件中需要包含類名的.h文件
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章