程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++基礎知識 >> C++ class和struct的區別

C++ class和struct的區別

編輯:C++基礎知識
C++ 中保留了C語言的 struct 關鍵字,並且加以擴充。在C語言中,struct 只能包含成員變量,不能包含成員函數。而在C++中,struct 類似於 class,既可以包含成員變量,又可以包含成員函數。

C++中的 struct 和 class 基本是通用的,唯有幾個細節不同:
  • 使用 class 時,類中的成員默認都是 private 屬性的;而使用 struct 時,結構體中的成員默認都是 public 屬性的。
  • class 繼承默認是 private 繼承,而 struct 繼承默認是 public 繼承(《C++繼承與派生》一章會講解繼承)。
  • class 可以使用模板,而 struct 不能(《模板、字符串和異常》一章會講解模板)。

C++ 沒有拋棄C語言中的 struct 關鍵字,其意義就在於給C語言程序開發人員有一個歸屬感,並且能讓C++編譯器兼容以前用C語言開發出來的項目。

在編寫C++代碼時,我強烈建議使用 class 來定義類,而使用 struct 來定義結構體,這樣做語義更加明確。

使用 struct 來定義類的一個反面教材:
#include <iostream>
using namespace std;

struct Student{
    Student(char *name, int age, float score);
    void show();

    char *m_name;
    int m_age;
    float m_score;
};

Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ }
void Student::show(){
    cout<<m_name<<"的年齡是"<<m_age<<",成績是"<<m_score<<endl;
}

int main(){
    Student stu("小明", 15, 92.5f);
    stu.show();
    Student *pstu = new Student("李華", 16, 96);
    pstu -> show();

    return 0;
}
運行結果:
小明的年齡是15,成績是92.5
李華的年齡是16,成績是96

這段代碼可以通過編譯,說明 struct 默認的成員都是 public 屬性的,否則不能通過對象訪問成員函數。如果將 struct 關鍵字替換為 class,那麼就會編譯報錯。
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved