C++中的 class和struct区别

C++ 中保留了C语言的 struct 关键字,并且加以扩充。在C语言中,struct 只能包含成员变量,不能包含成员函数。而在C++中,struct 类似于 class,既可以包含成员变量,又可以包含成员函数。

C++中的 struct 和 class 基本是通用的,唯有几个细节不同:

  • 使用 class 时,类中的成员默认都是 private 属性的;而使用 struct 时,结构体中的成员默认都是 public 属性的。
  • class 继承默认是 private 继承,而 struct 继承默认是 public 继承(《C++继承与派生》一章会讲解继承)。
  • class 可以使用模板,而 struct 不能(《模板、字符串和异常》一章会讲解模板)。

C++ 没有抛弃C语言中的 struct 关键字,其意义就在于给C语言程序开发人员有一个归属感,并且能让C++编译器兼容以前用C语言开发出来的项目。

在编写C++代码时,我强烈建议使用 class 来定义类,而使用 struct 来定义结构体,这样做语义更加明确。

使用 struct 来定义类的一个反面教材:

arduino 复制代码
    #include <iostream>
    using namespace std;
    struct Student{
        Student(char *name, int age, float score);
        void show();
        char *m_name;
        int m_age;
        float m_score;
    };
    Student::Student(char *name, int age, float score): m_name(name), m_age(age), m_score(score){ }
    void Student::show(){
        cout<<m_name<<"的年龄是"<<m_age<<",成绩是"<<m_score<<endl;
    }
    int main(){
        Student stu("小明", 15, 92.5f);
        stu.show();
        Student *pstu = new Student("李华", 16, 96);
        pstu -> show();
        return 0;
    }

运行结果:小明的年龄是15,成绩是92.5

李华的年龄是16,成绩是96

相关推荐
jifengzhiling35 分钟前
零极点对消:原理、作用与风险
人工智能·算法
喜欢吃豆1 小时前
我把 LLM 技术栈做成了一张“可复用的认知地图”:notes-on-llms 开源仓库介绍
学习·语言模型·架构·开源·大模型·多模态
鲨莎分不晴1 小时前
【前沿技术】Offline RL 全解:当强化学习失去“试错”的权利
人工智能·算法·机器学习
XFF不秃头2 小时前
力扣刷题笔记-全排列
c++·笔记·算法·leetcode
菜鸟233号2 小时前
力扣669 修剪二叉搜索树 java实现
java·数据结构·算法·leetcode
光羽隹衡2 小时前
机械学习逻辑回归——银行贷款案例
算法·机器学习·逻辑回归
FrameNotWork2 小时前
HarmonyOS 教学实战(五):路由、页面生命周期与多页面架构
华为·架构·harmonyos
Kyle01233 小时前
计算机体系结构中的中断处理机制:硬件响应与软件识别的协同架构
架构·操作系统·计组
能源系统预测和优化研究3 小时前
创新点解读:基于非线性二次分解的Ridge-RF-XGBoost时间序列预测(附代码实现)
人工智能·深度学习·算法