• struct 和 class的区别


    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

  • 相关阅读:
    设计模式之装饰者模式
    每天一点点
    生财有道
    地图的移动和缩放
    钱分割
    位运算
    ref和out
    使用startCoroutine制定倒计时
    静态类和单例类
    Awake和Start
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/9471030.html
Copyright © 2020-2023  润新知