Skip to content

结构体、类和对象的区别

1. 结构体(Struct)

是什么:结构体是一种将多个数据打包在一起的容器,通常用于表示简单的数据结构。
特点

  • 只有数据(属性),没有行为(方法)。
  • 通常是值类型(复制时会创建新副本)。

示例(伪代码):

python
# 定义一个结构体表示点坐标
struct Point:
    x: int
    y: int

# 使用
p1 = Point(10, 20)  # 创建一个点
p2 = p1             # 复制p1的值到p2(p2是新副本)
p2.x = 30           # 修改p2不会影响p1
print(p1.x)         # 输出: 10(p1未被修改)

2. 类(Class)

是什么:类是描述对象行为和数据的模板,可以包含数据(属性)和函数(方法)。
特点

  • 有数据(属性)和行为(方法)。
  • 通常是引用类型(赋值时传递引用,共享同一块内存)。

示例(伪代码):

python
# 定义一个类表示人
class Person:
    name: string
    age: int

    # 方法(行为)
    def greet():
        print("Hello, I'm " + self.name)

# 使用
person1 = Person("Alice", 25)  # 创建一个Person对象
person2 = person1             # person2和person1指向同一个对象
person2.name = "Bob"          # 修改person2会影响person1
person1.greet()               # 输出: "Hello, I'm Bob"(person1也被修改了)

3. 对象(Object)

是什么:对象是类的具体实例,通过类创建出来的实际“东西”。
类比

  • 类是“设计图”(比如汽车的图纸),对象是“实物”(根据图纸造出的具体汽车)。

示例(接上面的类):

python
# person1和person2是Person类的两个对象
person1 = Person("Alice", 25)
person2 = Person("Bob", 30)

关键区别总结:

特性结构体(Struct)类(Class)对象(Object)
数据只有属性有属性和方法类的具体实例
行为无方法有方法调用类中定义的方法
内存特性通常值类型(复制副本)通常引用类型(共享引用)实际占用内存的实例
用途简单数据聚合复杂逻辑封装运行时操作的具体实体

补充说明:

  • 如果语言支持面向对象(如 Java/C#),是核心概念;如果是 C 语言等,只能用结构体(无方法)。
  • 某些语言(如 C++/Python)中,结构体和类的区别可能更模糊(例如 C++中结构体也可以有方法)。