struct和class如果按照在C的时代,还是有很大差别的。
c中struct的定义如下:
struct 结构名
{
成员表
};
因为struct是一种数据类型,那么就肯定不能定义函数,所以在面向c的过程中,struct不能包含任何函数,如下所示:
struct A { int length; int width; };
如果出现下面的结构体定义,编译器将报错:
struct A { int length; int width; int GetSize() { return length*width; }; };
面向过程的编程中,数据和数据操作是分开的。然而当struct进入面向对象的c++时,其特性也有了新发展,在c++中认为数据和数据对象是一个整体,不应该分开,这就是struct在c和c++两个时代的差别。
在C++中,struct和class两者的区别已经不大了,但是还是有差别的,下面我来总结一下:
(1)初始化问题
struct A //定义一个struct { char c1; int n2; double db3; }; A a={'p', 7, 3.1415926}; //定义时直接赋值
上述的struct的定义和初始化都是没有问题的。因为它没有定义构造函数。加入一个构造函数或是一个虚函数会使struct更体现出一种对象的特性,而使此{}操作不再有效。
事实上,是因为加入这样的函数,使得类的内部结构发生了变化。而加入一个普通的成员函数呢?
你会发现{}依旧可用。其实你可以将普通的函数理解成对数据结构的一种算法,这并不打破它数据结构的特性。
class和struct如果定义了构造函数,就不能用大括号进行初始化了;若没有定义,struct可以用大括号初始化,而class只有在所有成员变量全是public的情况下,才可以用大括号进行初始化。
(2)默认的访问权限
struct默认访问权限为public,而class的默认访问权限为private
(3)默认继承方式
struct默认继承方式为public,而class的默认继承方式为private