首页 > 编程语言 >C++中的 class和struct区别

C++中的 class和struct区别

时间:2023-09-07 18:03:36浏览次数:37  
标签:name age C++ score class struct


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

C++中的 class和struct区别_c++

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

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

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

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

C++中的 class和struct区别_定义类_02

C++中的 class和struct区别_成员变量_03

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

#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

标签:name,age,C++,score,class,struct
From: https://blog.51cto.com/u_15641375/7399388

相关文章

  • 【C++】C++ 引用详解 ⑦ ( 指针的引用 )
    文章目录一、二级指针可实现的效果二、指针的引用1、指针的引用等同于二级指针(重点概念)2、引用本质-函数间接赋值简化版本3、代码示例-指针的引用一、二级指针可实现的效果指针的引用效果等同于二级指针,因此这里先介绍二级指针;使用二级指针作为参数,可......
  • 【C++】C++ 引用详解 ④ ( 函数返回 静态变量 / 全局变量 的 引用 / 指针 )
    文章目录一、函数返回静态变量/全局变量的引用/指针1、函数返回局部变量引用或指针无意义2、函数返回静态变量/全局变量的引用或指针3、代码示例-函数返回静态变量/全局变量的引用或指针一、函数返回静态变量/全局变量的引用/指针1、函数返回局部变量引用或指针......
  • Uchardet C++源码编译步骤 文本编码检测命令行工具 Command line
    从官网 https://www.freedesktop.org/wiki/Software/uchardet/下载源码 https://www.freedesktop.org/software/uchardet/releases/=====================================================================================下载编译工具:Cmake和mingw64https://cmake.org......
  • cv2.error: Unknown C++ exception from OpenCV code.报错解决
    问题原因:opencv版本太高,python版本太低解决办法:打开opencv下载网站找到自己的python版本对应的opencv的版本,然后通过下面代码安装pipinstallopencv-python==4.1.2.30-ihttps://pypi.tuna.tsinghua.edu.cn/simple ......
  • 报org.apache.axis cannot be resolved to a type且Syntax error on token "enum", cl
    一位专门负责导数据和单点登录模块的同事最近提交了一些代码,但由于他出差了,代码同步下来却发现报如下的错误:org.apache.axiscannotberesolvedtoatype且Syntaxerrorontoken"enum",classexpected错误查看出错文件发现代码中凡是出现“oper.setStyle(org.apache.axis.enum......
  • 一些C++库的简要说明
    说明:1.**Boost**:提供了许多C++库,如Boost.Asio(网络和异步I/O)、Boost.Filesystem(文件系统操作)、Boost.Thread(多线程支持)、Boost.Serialization(序列化)等。用于增强C++的功能。2.**cpp2sky**:用于与SkyWalkingAPM系统集成的库,提供应用程序性能监视和分析功能。3.**cppzmq**:C++Z......
  • Adobe Lightroom Classic 12.4详细安装教程
    AdobeLightroomClassic12.4的新增功能包括:借助AI支援的降噪功能,可以轻松、有效的消除RAW图像中的杂色,同时保留精细细节。使用新蒙版功能对图像进行清晰的编辑。体验人物蒙版中的新增功能,可以自动选择脸部毛发。通过对照片进行终极图像控制以获得最佳效果。修复面板中新增的内......
  • C++学习笔记
    ++--自增自减运算符1++ 赋值运算符,;运算符选择语句if----elseif(表达式1){代码块;//表达式1为真执行该代码块}elseif(表达式2){代码块;//表达式2为真执行该代码块的内容}else{代码块;//以上的表达式都不满足执行该代码块的内容}switch多分支语句#include<st......
  • C++语言学习10
    一、deque双端队列容器#include是下标顺序容器,它允许在首尾两端快速的插入、删除数据deque的元素不是全部相邻存储的:采用单独分配的固定大小数组的序列存储数据,以及额外的登记表(中控数组),该表中记录了所有序列的地址,这表示通过下标访问元素时必须经过两次指针解引用,vect......
  • C++的向上转型
    在C/C++中经常会发生数据类型的转换,例如将int类型的数据赋值给float类型的变量时,编译器会先把int类型的数据转换为float类型再赋值;反过来,float类型的数据在经过类型转换后也可以赋值给int类型的变量。数据类型转换的前提是,编译器知道如何对数据进行取舍。例如:inta=......