当前位置:   article > 正文

struct和class_c++ class 里面的struct

c++ class 里面的struct

1.C中的struct和class

(1)在C语言中无class关键字

(2)C语言中的struct不能用来定义函数,在C中struct是一种数据类型,所以我们通常使用struct来构建数据结构。

2.C++中的struct和class

在C++中引入struct是为了保持对C程序的兼容,在引入之后C++对其进行了扩充,现在struct也可以拥有静态成员、成员数据,可进行初始化、拥有函数、也可以继承、甚至多态也支持。

(1)默认访问权限不同。struct和class都可以添加private/public修饰符,但是如果没有显式添加,struct默认的访问权限为public,而class的默认访问权限是private。如下:

  1. struct A
  2. {
  3. int x;
  4. }
  5. class B
  6. {
  7. int x;
  8. }
  9. A a;
  10. a.x= 1; //没有问题,因为struct默认访问属性为public
  11. B b;
  12. b.x= 1; //编译出错,因为class默认访问属性为private

(2)默认继承权限不同。C++中struct和class都是可以继承的,struct默认的继承权限是public,而class的默认继承权限是private。如下:

  1. struct A
  2. {
  3. int x;
  4. }
  5. struct B : A
  6. {
  7. int x;
  8. }
  9. B b;
  10. b.x = 1; //正确的, 因为struct默认的继承权限是public
  11. class A
  12. {
  13. int x;
  14. }
  15. class B : A
  16. {
  17. int x;
  18. }
  19. B b;
  20. b.x = 1; //错误的, 因为class默认的继承权限是private

另外,struct可以继承class,同样class也可以继承struct,默认的继承访问权限是看子类到底是用的struct还是class。如下:

  1. struct A{};
  2. class B : A {}; //默认为private继承
  3. struct C : B{}; //默认为public继承

(3)使用大括号赋值时的区别。struct如果没有定义构造函数,可以使用大括号对struct的数据成员进行赋值,但是如果struct中定义了一个构造函数,则不能使用大括号进行赋值了。class只有在成员变量全部是public的情况下,才能使用大括号进行赋值。

(4)在C++中,class这个关键字可以用于定义模板参数,就像typename,而struct不能。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/714814
推荐阅读
相关标签
  

闽ICP备14008679号