struct和class区别

在C++中,struct(结构体)和class(类)的基本用法非常相似,因为C++中的结构体可以含有函数和构造函数,它们都可以用来定义包含数据成员和成员函数的自定义类型。不过,结构体和类之间存在一些关键区别:

默认访问权限

  • struct:默认的成员访问权限和继承访问权限是public
  • class:默认的成员访问权限和继承访问权限是private

这意味着当你使用structclass关键字定义类型时,不显式指定访问修饰符的成员在struct中默认是公开的,在class中默认是私有的。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct MyStruct {
int x; // 默认是public
};

class MyClass {
int y; // 默认是private
public:
MyClass(int val) : y(val) {}
int getY() { return y; }
};

MyStruct s;
s.x = 5; // 直接访问

MyClass c(5);
// c.y = 5; // 错误:y是私有的,不能直接访问
int value = c.getY(); // 通过成员函数访问

使用场景

尽管两者几乎可以互换使用,但是按照传统的编程习惯和约定,它们各有不同的使用场景:

  • struct:通常用于较简单的数据结构,主要用于存储数据,成员默认公开。
  • class:用于更复杂的数据结构,可能包含抽象行为和封装,成员默认私有。

这些约定主要是为了提高代码的可读性和意图表达。使用struct通常意味着该类型更倾向于数据存储而非行为,而使用class则意味着更多的封装和面向对象的设计。

其他差异

在C++中,structclass在语法上几乎是相同的,因为struct也可以继承其他类,拥有构造函数、析构函数、成员函数和私有成员。因此,上述的访问权限差异是它们唯一显著的区别,而且这个区别只是一个默认行为,完全可以通过显式指定访问修饰符来改变。

总结

总的来说,structclass在C++中的用法区别主要是默认访问权限不同,以及传统上它们各自的使用场景。在实际编程中,你可以根据具体的需求和设计习惯来选择使用哪一个