详解C++之类和对象(1):从结构体到类的演变

Leo
Leo
发布时间:2026-10-13| 2人浏览过
原创

C++作为兼具面向过程和面向对象特性的语言,其核心在于"类"的概念。本文将从C语言的结构体出发,对比其在C++中的演变,详细解析struct与class在访问权限上的区别,并介绍成员变量的封装方法。

C语言结构与C++结构体的差异

C语言是一种典型的面向过程编程语言,而在C++中,这种思维方式被保留并增强。两者最直观的区别体现在对数据结构的支持上。

在C语言中,struct(结构体)仅能包含数据变量,无法直接定义函数。如果需要操作结构体数据,必须额外编写独立的函数,并将结构体指针作为参数传入。

// C语言风格实现
struct Student 
{
	char _name[20];
	int _age;
	char _sex[10];
};

void SetStudentInfo(struct Student* s, const char* name, const char* sex, int age)
 {
    strcpy(s->_name, name);
    strcpy(s->_sex, sex);
    s->_age = age;
 }
 
 void printStudentInfo(const struct Student* s)
 {
    printf("%s:%d:%s", s->_name, s->_age, s->_sex);
 }

如上所示,数据的存储逻辑与处理逻辑是分离的。为了在C++中实现更紧密的数据封装,我们引入了内联函数的概念:

// C++ 风格实现
struct Student 
{
    // 直接在结构体内定义函数
    void SetStudentInfo(const char* name, const char* sex, int age)
    {
        strcpy(_name, name);
        strcpy(_sex, sex);
        _age = age;     	    
    } 
    
    void print() 
    {
        printf("%s:%d:%s", _name, _age, _sex);
    }
    
	char _name[20];
	int _age;
	char _sex[10];
};

可以看出,C++允许在struct内部同时定义成员变量和成员函数,使得数据结构与其操作逻辑紧密结合。

Struct与Class的关键区别

虽然C++保留了struct关键字用于定义包含函数的类型,但为了满足面向对象编程的需求,又引入了class关键字。它们之间的核心区别在于默认的访问控制权限。

第1步:了解访问权限修饰符

在类的定义中,为了保障数据安全,引入三种关键修饰符:

  • public:公有成员,可在类内外自由访问。
  • private:私有成员,仅在类内部访问,外部不可见。
  • protected:保护成员,主要用于继承场景(此处暂不展开)。

第2步:对比默认行为

当我们使用 struct 定义类型时,所有的成员(包括变量和函数)默认都是 public 的。这意味着任何地方都能随意修改其内部数据,这在复杂系统中容易引发安全隐患。

// struct 默认全是 public
struct StudentData 
{
	char _name[20];
	int _age;
};
// 外部可以直接 StudentData.age = 10; 访问,缺乏保护

相比之下,class 的所有成员默认是 private 的。这种设计强制开发者通过公共接口(Public Interface)来访问内部状态,符合面向对象的数据封装原则。

// class 默认全是 private
class StudentInfo 
{
    // 这里的函数默认是 private
    void SetInfo(...); 

    // 这里的变量默认也是 private
    char _name[20]; 
    int _age;
};
// 若要外部调用,必须显式添加 public: 标签
public:
    void PrintInfo();

总结

C++通过引入类和对象,解决了C语言中数据与操作分离的问题。struct更像是一个无访问控制的聚合体,而class则提供了基于默认私有的封装机制。在实际开发中,通常使用 class 配合 private 变量和 public 接口来实现安全的面向对象设计。

以上就是详解C++之类和对象(1)的详细内容,更多关于C++基础资料请关注本站其它相关文章!
相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。