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

posted on 2018-08-13 21:20  Mini_Coconut  阅读(206)  评论(0编辑  收藏  举报