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 一般是作为不同类型的合集。

浙公网安备 33010602011771号