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

  • 相关阅读:
    vue loading 插件编写与实战
    vue tab切换的几种方式
    IOS安卓常见问题
    vue.js 跨域的解决方法(转载)
    vue 根据设计稿rem适配
    vuex 文件夹目录整理
    vue项目优化之路由懒加载
    flutter 环境配置-01
    锚点 定位 导航 滑动
    居中 子元素无固定 宽高
  • 原文地址:https://www.cnblogs.com/mini-coconut/p/9471030.html
Copyright © 2011-2022 走看看