1. 程式人生 > 其它 >c++struct 和 class

c++struct 和 class

首先,注意本文討論的是 C++ 中 struct 和 class 的區別,因為 C 中 struct 和 class 的區別已經很明顯了!

先說下 C++ 中 struct 相比於 C 中增加了哪些功能。

1. struct 中可以使用 public、private、protected等屬性,和 C++ 一樣。

#include <iostream>
using namespace std;
struct Node { public: int x; private: int y; protected: int
z; };
int main() { Node obj; obj.x = 10; cout<<"obj.x = "<<obj.x<<endl; }

2. struct 中可以新增方法

方法和函式的區別:   

1)函式是一段程式碼,通過名字來進行呼叫。它能將一些資料(引數)傳遞進去進行處理,然後返回一些資料(返回值),也可以沒有返回值。   所有傳遞給函式的資料都是顯式傳遞的。函式和物件無關。   

2)方法也是一段程式碼,也通過名字來進行呼叫,但它跟一個物件相關聯。方法和函式大致上是相同的,但有兩個主要的不同之處:   方法中的資料是隱式傳遞的;方法和物件相關。   方法可以操作類內部的資料(請記住,物件是類的例項化–類定義了一個數據型別,而物件是該資料型別的一個例項化)   

3)方法在 C++ 中是被稱為成員函式”。因此,在 C++ 中的“方法”和“函式”的區別,就是“成員函式”和“函式”的區別。此外,諸如 Java一類的程式語言只有“方法”。所以這時候就是“靜態方法”和“方法”直接的區別。   

4)Java中只有方法,C中只有函式,而C++裡取決於是否在類中。

例如:

#include <iostream>
using namespace std;

struct Node {
    public:
        int add(int x, int y) {
            return x + y;
        }
};

int main() { Node obj; cout<<"add 10 + 20 = "<<obj.add(10, 20)<<endl; }

3. struct 可以繼承等屬性

例如:

#include <iostream>
using namespace std;

struct Parent {
    int left;
    int right;
};

struct Node : Parent{
    public:
        int x;
};

int main() {
    Node obj;
    obj.left = 10;
    cout<<"obj.left = "<<obj.left<<endl;
}


從上面可以看到,在C++中,struct 已經和 class 基本相同了。那為什麼還要保留 struct 呢,因為 C++ 是要相容 C的,畢竟是 c plus plus 。

那下面來具體看看 struct 和 class 有哪些不同:

0. 定義上不同

struct 是各種資料型別的組合,是一種複合資料型別,class 是一個物件的方法和屬性的集合,更注重資料的安全性。

1. 預設的訪問屬性不同

struct 預設的訪問屬性是 public,class 預設的訪問屬性是 private

2. 預設的繼承方式不同

struct 預設的繼承方式是 public,class 預設的繼承方式是 private。

總結

在 C++ 中通常更推薦使用 class,資料安全性更高,struct 一般是作為不同型別的合集。