zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    memset函数具体说明
    几种常见模式识别算法整理和总结
    GridView编辑删除操作
    Linux的文件夹配置
    Js apply 方法 具体解释
    深入分析C++引用
    Sizzle.selectors.relative [ 源代码分析 ]
    中文分词国内现状
    [数字图像处理]图像去噪初步(2)--非线性滤波器
    线程间共享数据的一个样例
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/9471030.html
Copyright © 2011-2022 走看看