C++的struct和class的区别

本文详细探讨了C++中struct和class的主要区别,包括成员访问范围、继承关系访问差异以及{}初始化的不同。在成员访问方面,struct默认为public,而class默认为private。在继承关系中,struct与class之间的继承访问权限各有不同。至于{}初始化,struct在某些情况下可以直接用于数据初始化,而class则不能。此外,还简要提到了C和C++中struct的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. C++的struct和class的区别

差异特性 struct class
成员访问范围 默认public 默认private
继承关系访问范围 默认public 默认private
{}初始化 1、纯数据或纯数据+普通方法的结构体支持;2、带构造函数或虚方法的结构体不支持 不支持

1.1 成员访问范围的差异

1. struct
struct Person {
   
    int age;
}
Person *person = new Person();
person->age = 12;

可以正常的编译和执行。

2. class
class Person {
   
    int age;
}
Person *person = new Person();
person->age = 12; // 编译出错,应改为public int age;

【扩展】如果不增加public关键字,又想在某个类如ClassA中能访问到这个Person类中的成员,可以通过友元类(friend class Xxx)来将Person中的private和protected的成员共享出去。
Person类可以这么编写:

struct Person {
   
   	 friend class ClassA;
     int age;
}
Person *person = new Person();
person->age = 12;

在ClassA中,就可以访问Person中的所有成员了。

void ClassA:setAge() {
   
	Person *person = new Person();
	person->age = 12;
}

关于友元类的使用,可见c++论坛:https://cplusplus.com/forum/beginner/147733/

1.1 继承关系访问范围的差异

指的是子对象是否可访问到父对象中的成员。

1. struct : struct
struct SBase {
   
public:
    int age = 0;
    SBase() = default;
    virtual ~SBase() = default;
};

struct Person : SBase {
   
public:
    Person() = default;
    virtual ~Person() = default;
};

int main(int argc, const char **argv)
{
   
    Person* child = new Person();
    child->age = 1;
    fprintf(stdout, "test: age=%d\n", child->age);
}

访问正常。
在这里插入图片描述

2. struct : class
class CBase {
   
public:
    int age = 0;
    CBase() = default;
    
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值