您的位置:首页 > 编程语言 > C语言/C++

[C++] 再谈Struct和Class的区别

2010-02-23 16:54 423 查看
这是我在CSDN博客上的第一篇文章,希望大家多来捧场!
闲话不多说了,进入正题!

很多论坛上,都有人在写C++中Struct和Class的区别,不讲究跟风,只想把自己的理解写出来,分享给大家!
Struct:成员函数默认情况下为Public类型。
Class:成员函数默认情况下为Private类习。
现在多数人,都将上述的内容,看做Struct和Class之间的唯一区别。
真是仅仅如此吗?
不!绝对不是!C++是面向对象的开发语言啊!我们要多多考虑这方面的因素!
封装性是面向对象的三大基本特性之一,我们应该从这一点出发,进一步研究Struct和Class之间的区别。
对于Struct来说,它的数据成员,在多数情况下,是对外可见的,也就是说,它的数据成员是Public。
而对于Class来说,它的数据成员,在遵从OO标准的情况下,是对外不可见的,也就是说,它的数据成员是Protected或Private。
举例来说:
  struct Example
  {
      int iData1; // 对外可直接访问成员变量
      int iData2;
  };  // 这种方式,是从C语言延续下来的习惯性的定义方式
 
  Class CExample
  {
  public:
    CExample(void);
    virtual ~CExample(void);
    
    bool SetData1(int iData); // 通过Set和Get,来访问成员变量
    bool SetData2(int iData);
    
    const int& GetData1(void);
    const int& GetData2(void);
    
  protected:
    int m_iData1;
    int m_iData2;
    
    CExample(const CExample& clSrc);
    CExample& operator= (const CExample& clSrc);
    ......
  }; // 这是遵从OO标准的定义方式

 void main(void)
 {
   Example  stExa = {0};
   CExample clExa;
   
   stExa.iData1 = 1;
   clExa.SetData1(1);
   
   ......
 }
 
看到这里,有人会提出异议了:“你说的不对,struct同样可以将成员函数,声明为Protected或者Private。”

那么,我们来看考虑一下,在将struct的成员函数声明为Protected或者Private这种情况下,为什么不直接使用class呢?我们是完全有理由这样做的!
struct和class一样,就算你只定义了成员变量,不定义任何的成员函数,编译器也是会提供默认的几个函数的(至于都提供了哪些默认的函数,就不在此说明了)。
所以,这种情况下,是应该使用class,而非struct的。

好!到此,已经把想写的都写出来了,如果有什么疑问或者意见,请留言吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息