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://private成员只能被本类成员(类内)和友元访问,不能被派生类访问;即只能由该类内部的成员函数访问 int y; protected://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 一般是作为不同类型的合集。

posted @ 2021-10-14 18:43  cccbba  阅读(262)  评论(0)    收藏  举报