当前位置:   article > 正文

C++的struct和class的区别_c++ class和struct的异同

c++ class和struct的异同

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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

可以正常的编译和执行。

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

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

struct Person {
   
   	 friend class ClassA;
     int age;
}
Person *person = new Person();
person->age = 12;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

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

void ClassA:setAge() {
   
	Person *person = new Person();
	person->age = 12;
}
  • 1
  • 2
  • 3
  • 4
  • 5

关于友元类的使用,可见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);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

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

2. struct : class
class CBase {
   
public:
    int age = 0;
    CBase() = default;
    
  • 1
  • 2
  • 3
  • 4
  • 5
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/714759
推荐阅读
相关标签
  

闽ICP备14008679号