zoukankan      html  css  js  c++  java
  • struct vs class in C++

      在C++中,除了以下几点外,struct和class是相同的。

      (1)class的成员的默认访问控制是private,而struct的成员的默认访问权限是public。

      例如,program 1会编译失败,而program 2可正常运行。

     1 // Program 1
     2 #include <stdio.h>
     3  
     4 class Test 
     5 {
     6     int x; // x is private
     7 };
     8 
     9 int main()
    10 {
    11   Test t;
    12   t.x = 20; // compiler error because x is private
    13   getchar();
    14   return 0;
    15 }
    16 
    17 // Program 2
    18 #include <stdio.h>
    19  
    20 struct Test 
    21 {
    22     int x; // x is public
    23 };
    24 
    25 int main()
    26 {
    27   Test t;
    28   t.x = 20; // works fine because x is public
    29   getchar();
    30   return 0;
    31 }

      (2)在继承体系中,当struct继承自struct/class时,对于base struct/class的默认访问控制是public。但当class继承自struct/class时,对base struct/class的默认访问控制是private。

      例如,program 3会编译失败,而program 4可正常运行。

     1 // Program 3
     2 #include <stdio.h>
     3  
     4 class Base 
     5 {
     6 public:
     7     int x;
     8 };
     9  
    10 class Derived : Base 
    11 { 
    12 }; // is equilalent to class Derived : private Base {}
    13  
    14 int main()
    15 {
    16   Derived d;
    17   d.x = 20; // compiler error becuase inheritance is private
    18   getchar();
    19   return 0;
    20 }
    21 
    22 // Program 4
    23 #include <stdio.h>
    24  
    25 class Base 
    26 {
    27 public:
    28     int x;
    29 };
    30  
    31 struct Derived : Base 
    32 { 
    33 }; // is equilalent to struct Derived : public Base {}
    34  
    35 int main()
    36 {
    37   Derived d;
    38   d.x = 20; // works fine becuase inheritance is public
    39   getchar();
    40   return 0;
    41 }

      总结:

      对于struct和class的不同点就在于:默认访问控制不同,struct为public,class为private。

      而这个不同体现在两个地方:一是成员的默认访问控制;二是继承体系中对基类的默认访问控制。

      Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

      转载请注明:http://www.cnblogs.com/iloveyouforever/

      2013-11-25  19:52:01

  • 相关阅读:
    分析java程序的命令总结jps,jstack
    Tomcat配置详解及tomcat的连接数与线程池
    Go入门练习题
    WebSocket的原理,及如何测试websocket是否连接成功
    day3-每天进步一点基础知识-正则练习题
    day2-每天进步一点基础知识
    day1-每天进步一点
    数组有没有length()这个方法? String有没有length()这个方法?
    List, Set, Map是否继承自Collection接口?
    启动一个线程是用run()还是start()?
  • 原文地址:https://www.cnblogs.com/iloveyouforever/p/3442118.html
Copyright © 2011-2022 走看看