C语言中的结构体(Struct)与C++中的类(Class)
区别
-
基本组成:
- C语言的结构体:只包含数据成员,不包含成员函数。结构体主要用于封装多个不同类型的数据。
- C++的类:包含数据成员和成员函数。类不仅封装了数据,还封装了与这些数据相关的操作。
-
访问控制:
- C语言:没有访问控制(如public、private、protected)。
- C++:提供了访问控制,允许你控制哪些成员是公有的,哪些是私有的。
-
继承:
- C语言:不支持继承。
- C++:支持继承,允许你创建新的类,继承自已有的类,并添加或覆盖成员。
-
多态:
- C语言:不支持多态。
- C++:支持多态,通过虚函数实现。
-
构造函数和析构函数:
- C语言:没有构造函数和析构函数的概念。
- C++:提供了构造函数和析构函数,用于对象的初始化和清理。
作用
-
C语言的结构体:主要用于组织和管理多个不同类型的数据。
-
C++的类:用于封装数据和方法,创建具有特定属性和行为的对象。它支持面向对象的三大特性:封装、继承和多态。
联系
- C++的类是在C语言的结构体基础上发展而来的,提供了更多的功能和灵活性。
- C++的类兼容C语言的结构体,也就是说,C++中的结构体实际上是一个特殊的类,它默认所有成员都是公有的,并且没有构造函数、析构函数和访问控制。
优缺点
C语言的结构体:
- 优点:简单、直接,易于理解和使用。
- 缺点:功能有限,不支持封装、继承和多态等面向对象特性。
C++的类:
-
优点:
- 支持面向对象编程,提供了封装、继承和多态等特性。
- 增强了代码的可读性、可维护性和可重用性。
- 提供了构造函数、析构函数等,简化了对象的初始化和清理过程。
-
缺点:
- 相对于C语言的结构体,学习和使用的门槛更高。
- 过度使用面向对象特性可能导致代码复杂度和运行效率的增加。
代码示例
C语言的结构体:
#include <stdio.h>
#include <string.h>
// 定义一个结构体
struct Student {
char name[50];
int age;
};
void printStudent(struct Student s) {
printf("姓名: %s, 年龄: %d\n", s.name, s.age);
}
int main() {
struct Student stu1;
strcpy(stu1.name, "张三");
stu1.age = 20;
printStudent(stu1);
return 0;
}
C++的类:
#include <iostream>
#include <string>
// 定义一个类
class Student {
public:
Student(const std::string& name, int age) : name(name), age(age) {}
void print() const {
std::cout << "姓名: " << name << ", 年龄: " << age << std::endl;
}
private:
std::string name;
int age;
};
int main() {
Student stu1("张三", 20);
stu1.print();
return 0;
}
在这个例子中,C++的类Student
封装了数据成员name
和age
,以及一个成员函数print
,用于打印学生的信息。而C语言的结构体Student
只包含了数据成员,并需要一个单独的函数printStudent
来访问和打印这些成员。