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

  • 相关阅读:
    .Net在线付款Paypal在线付款开发过程
    IE6.0 DIV层被SELECT遮挡的问题以及解决方案
    關於Nhibernate聯合主鍵的配置
    ASIHTTPRequest详解
    ArrayList IndexOf
    PLIST 读写
    iOS开发中的键盘高度变化处理
    IOS 数字键盘添加“完成”按钮
    Xcode解决error: PCH file built from a different branch ((clang425.0.27))
    IOS OPENURL调用第三方APP
  • 原文地址:https://www.cnblogs.com/iloveyouforever/p/3442118.html
Copyright © 2011-2022 走看看