[C++] struct和class的区别与比较

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

CC++
成员函数不允许允许
静态成员不允许允许
访问属性默认public,不能修改默认public,还可以是private或者protected
继承关系不可以继承可以从其他类或结构体继承
初始化不能直接初始化数据成员可以直接初始化数据成员

C是面向过程的编程语言,C++是面向对象的编程语言

C中的结构体就是不同类型数据的集合,并不涉及算法和操作

C++中是把数据变量及对这些变量的相关算法和操作给封装起来

C++中struct和class的区别

更像自定义数据结构集合的话用struct。如果更像一种对象的话用class

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

在C++中引入struct是为了保持对C程序的兼容,在引入之后C++对其进行了扩充,C++中struct可以拥有静态成员、成员数据可进行初始化、成员函数、可以继承、支持多态。从表面看起来两者之间没有区别,但也存在差异

  • 内部成员变量及成员函数的默认属性

    struct默认是public,而class默认是private

  • 继承关系中默认属性

    在继承关系中,struct继承struct默认是public的,而class继承class默认是private

    默认的继承属性取决于子类而不是基类:

    struct A{};
    class B : A{};//取决于子类,默认是private
    struct C : A{};//取决于子类,默认是public
    

    所以在写代码的时候,为了不引起歧义,需要指明继承的方式,而不要用默认的继承

  • 模板的使用

    class关键字还可以定义模板参数,就像typename,但是struct不用于定义模板参数

    template<typename T, typename Y>
    int func(const T& t, const Y& y) {
        
    }
    
  • 赋初值

    C++中的struct兼容过去C中struct的特性

    struct A {
        char a;
        int b;
        double c;
    };
    A d = {'p', 1, 2.3};//定义时赋初值,struct没问题,class出错
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值