[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的。
好!到此,已经把想写的都写出来了,如果有什么疑问或者意见,请留言吧。
闲话不多说了,进入正题!
很多论坛上,都有人在写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的。
好!到此,已经把想写的都写出来了,如果有什么疑问或者意见,请留言吧。
相关文章推荐
- c++中struct和class的区别
- 【C++程序设计常见面试题】class 和 struct 的区别?(00)
- C++中结构体与类的区别(struct与class的区别)
- 在c++中struct和class的区别
- C++中结构体与类的区别(struct与class的区别)
- C++中struct与Class的的区别
- C++中struct和class定义类区别
- 在c++中struct和class的区别
- C++ class和struct的区别
- C++中class和struct的区别
- C++中结构体与类的区别(struct与class的区别)
- 探索C++对象模型之struct和class区别
- C++中struct和class的区别
- C++中结构体与类的区别(struct与class的区别)
- C++中struct和class的区别
- C++中struct和class的区别
- C++ struct class的区别
- C++中struct和class的区别
- C++中的struct和class的区别
- C++中struct与class的区别以及联系