精华内容
下载资源
问答
  • 2022-04-24 13:49:44

    在C++中,class和struct做类型定义如下区别:

    • 默认继承权限不同,class继承默认是private继承,而struct默认是public继承
    • class还可用于定义模板参数,像typename,但是关键字struct不能用于定义模板参数

    C++保留struct关键字,主要有如下原因

    • 保证与C语言的向下兼容性,C++必须提供一个struct

     

    更多相关内容
  • Struct和Class区别 今天这篇博文主要讲解在C++中关键字struct和class区别。这篇博文,将会系统的将这两个关键字的不同面进行详细的讲解。 从语法上来讲,class和struct做类型定义时只有两点区别: 1.默认继承...
  • c++的struct和class区别

    千次阅读 2020-04-27 17:48:46
    在C++中我们可以看到struct和class区别并不是很大,两者之间有很大的相似性。那么为什么还要保留struct,这是因为C++是向下兼容的,因此C++中保留了很多C的东西。 一.首先看一下C中struct 1.struct的定义 ...

    在C++中我们可以看到struct和class的区别并不是很大,两者之间有很大的相似性。那么为什么还要保留struct,这是因为C++是向下兼容的,因此C++中保留了很多C的东西。

    一.首先看一下C中struct

    1.struct的定义

    struct A
    {
        int a;
        int b;
        //成员列表
    };

    注意:因为struct是一种数据类型,那么就肯定不能定义函数,所以在面向c的过程中,struct不能包含任何函数。否则编译器会报错

    面向过程的编程认为,数据和数据操作是分开的。然而当struct进入面向对象的c++时,其特性也有了新发展,就拿上面的错误函数来说,在c++中就能运行,因为在c++中认为数据和数据对象是一个整体,不应该分开,这就是struct在c和c++两个时代的差别。

    在C++中struct得到了很大的扩充:

    1. struct可以包括成员函数
    2. struct可以实现继承
    3. struct可以实现多态

    二.strcut和class的区别

    1.默认的继承访问权。class默认的是private,strcut默认的是public。

    struct A
    {
        int a;
    };
     
    struct B: A
    {
        int b;
    };

    当然,到底默认是public继承还是private继承,取决于子类而不是基类。我的意思是,struct可以继承class,同样class也可以继承struct,那么默认的继承访问权限是看子类到底是用的struct还是class。如下: 

    struct A
    {
        int a;
    };
     
    struct B: A   //共有继承
    {
        int b;
    };
     
    class C: A    //私有继承
    {
        int c
    };

    2.默认成员访问权限:struct作为数据结构的实现体,它默认的成员访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的。

    struct A
    {
        int a;
    };
    int main()
    {
        A n;
        n.a = 10;
        return 0;
    }
    //可以在类外访问成员变量,所以struct默认是共有的
    class B
    {
        int b;
    };
     
    int main()
    {
     
        B n1;
        n1.b = 10;
        return 0;
    }
    //在内外无法访问私有变量

     3.“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数

    从上面的区别,我们可以看出,struct更适合看成是一个数据结构的实现体,class更适合看成是一个对象的实现体。

     4.class和struct在使用大括号{ }上的区别

    关于使用大括号初始化

    1. class和struct如果定义了构造函数的话,都不能用大括号进行初始化
    2. 如果没有定义构造函数,struct可以用大括号初始化。
    3. 如果没有定义构造函数,且所有成员变量全是public的话,class可以用大括号初始化。
    4. 虽然感觉struct是多余的,但考虑到“对c兼容”就将struct保留了下来,并做了一些扩展使其更适合面向对象,所以c++中的struct再也不是c中的那个了。

           两者最大的区别就在于思想上,c语言编程单位是函数,语句是程序的基本单元。而C++语言的编程单位是类。从c到c++的设计有过程设计为中心向以数据组织为中心转移。

     

    转载连接:

    https://blog.csdn.net/alidada_blog/article/details/83419757


     

    展开全文
  • 本文详细分析了C#中struct和class区别,对于C#初学者来说是有必要加以了解并掌握的。 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上。class是引用类型,创建一个class类型实例被分配在托管堆上...
  • 好的,今天先放点开胃菜,大家聊聊structclass关键字。 1.struct关键字: 在C++语言作为C语言的一个超集,是兼容C语言的所有语法规则的。C语言是我学习的第一门编程语言,我自然对于其中的语法规则十分熟悉,...
  • 一、C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同...struct是public的,class是private的。  写如下的代码: struct A { char a; }; struct B : A { char b; };  这个时候B是publ
  • 主要介绍了Swift中structclass区别 ,本文从汇编角度分析structclass区别,通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • struct和class区别

    千次阅读 2020-05-23 12:35:54
    1.struct 是值类型,class 是对象类型 2.struct 不能被继承,class 可以被继承 3.struct 默认的访问权限是public,而class 默认的访问权限是private. 4.struct总是有默认的构造函数,即使是重载默认构造函数仍然会...

    总结,主要有这么几点不同:

    1.struct 是值类型,class 是对象类型

    2.struct 不能被继承,class 可以被继承

    3.struct 默认的访问权限是public,而class 默认的访问权限是private.

    4.struct总是有默认的构造函数,即使是重载默认构造函数仍然会保留。这是因为Struct的构造函数是由编译器自动生成的,但是如果重载构造函数,必需对struct中的变量全部初始化。并且Struct的用途是那些描述轻量级的对象,例如Line,Point等,并且效率比较高。class在没有重载构造函数时有默认的无参数构造函数,但是一被重载些默认构造函数将被覆盖。

    5.struct的new和class的new是不同的。struct的new就是执行一下构造函数创建一个新实例再对所有的字段进行Copy。而class则是在堆上分配一块内存然后再执行构造函数,struct的内存并不是在new的时候分配的,而是在定义的时候分配

    展开全文
  • struct和class 区别

    千次阅读 2016-06-12 15:16:01
    struct和class 区别
     

    struct和class 区别



    struct和class区别与联系

    关于使用大括号初始化
    class和struct如果定义了构造函数的话,都不能用大括号进行初始化
    如果没有定义构造函数,struct可以用大括号初始化。
    如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。

    关于默认访问权限 
    class中默认的成员访问权限是private的,而struct中则是public的。

    关于继承方式 
    class继承默认是private继承,而struct继承默认是public继承。

    为什么在C++中存在struct?很多人都会想到这是为了让C++和C兼容,那么问题就是如何使用C++中的struct和C兼容起来。

    把C++要交换到C程序的数据在C++程序中声明成一个struct,然后根据C++中程序的语意选择继承或者聚合这个struct,然后在使用的时候就可以把这个struct封装起来传递到C中或者从C中传递到C++。(注:在深入探索C++对象模型中建议使用聚合,而不是继承,原因是为了和C语言的空间分布兼容,因为在C++引入虚函数,虚继承导致了派生类的空间包括struct的空间和vptr、vbtl,而且vptr、vbtl存放在哪里由编译器自己决定,C++标准中没有定义)。

    给出一个从C++到C语言的一个简单的例子:

    [cpp]  view plain  copy
    1. //C++头文件moduleA.h  
    2.   
    3. #ifndef MODULE_A_H  
    4.   
    5. #define MODULE_A_H  
    6.   
    7. struct person  
    8. {  
    9.        int age;  
    10.        char name[20];  
    11. };  
    12.   
    13. class male  
    14. {  
    15.       private:  
    16.               int wife;  
    17.               struct person per;  
    18.   
    19.       public:  
    20.              int getAge()  
    21.              {  
    22.                 return per.age;   
    23.               }  
    24.   
    25. };  
    26.   
    27. extern "C" void print(person );  
    28.   
    29. #endif  
    30.   
    31. //C++的实现文件  
    32.   
    33. #include "moduleA.h"  
    34.   
    35. #include <stdio.h>  
    36.   
    37. void print(person per)  
    38. {  
    39.         printf("age :%d, \n",per.age);  
    40.         return ;  
    41. }  
    42.   
    43. /*待处理的C语言文件*/  
    44.   
    45. #include <stdio.h>  
    46.   
    47. extern "C"  
    48. {  
    49.        #include "moduleA.h" //或者只要这个也能通过编译  
    50. }  
    51.   
    52. int main(void)  
    53. {  
    54.        person per;  
    55.        per.age = 18;  
    56.        print(per);  
    57.        return 0;  
    58.   
    59. }  


    讨论一下结构(struct)与类(class)的区别,你认为结构(struct)有些什么作用,可以完全用类(class)取代么??
    ---------------------------------------------------------------

    首先,讨论这个问题应该仅从语法上讨论,如果讨论不同人之间编程风格上的差异,那这个问题是没有答案的。毕竟不同的人偏好不同。

    从语法上,在C++中(只讨论C++中)。class和struct做类型定义时只有两点区别:
    (一)默认继承权限。如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理;
    (二)成员的默认访问权限。class的成员默认是private权限,struct默认是public权限。
    除了这两点,class和struct基本就是一个东西。语法上没有任何其它区别。

    不能因为学过C就总觉得连C++中struct和class都区别很大,下面列举的说明可能比较无聊,因为struct和class本来就是基本一样的东西,无需多说。但这些说明可能有助于澄清一些常见的关于struct和class的错误认识:
    (1)都可以有成员函数;包括各类构造函数,析构函数,重载的运算符,友元类,友元结构,友元函数,虚函数,纯虚函数,静态函数;
    (2)都可以有一大堆public/private/protected修饰符在里边;
    (3)虽然这种风格不再被提倡,但语法上二者都可以使用大括号的方式初始化:A a = {1, 2, 3};不管A是个struct还是个class,前提是这个类/结构足够简单,比如所有的成员都是public的,所有的成员都是简单类型,没有显式声明的构造函数。
    (4)都可以进行复杂的继承甚至多重继承,一个struct可以继承自一个class,反之亦可;一个struct可以同时继承5个class和5个struct,虽然这样做不太好。
    (5)如果说class的设计需要注意OO的原则和风格,那么没任何理由说设计struct就不需要注意。
    (6)再次说明,以上所有说法都是指在C++语言中,至于在C里的情况,C里是根本没有“class”,而C的struct从根本上也只是个包装数据的语法机制。
    ---------------------------------------------------------------

    最后,作为语言的两个关键字,除去定义类型时有上述区别之外,另外还有一点点:“class”这个关键字还用于定义模板参数,就像“typename”。但关键字“struct”不用于定义模板参数。

    展开全文
  • struct和class的主要的区别在于两者默认的访问权限有所不同。在不设置类中的成员属性成员方法的权限时,struct默认的访问权限是公共权限,class默认的访问权限是私有权限。 补充:成员属性成员方法的权限设置,...
  • C++中StructClass区别与比较

    万次阅读 多人点赞 2018-11-22 21:23:15
    之前只知道在C++中类结构体的区别只有默认的防控属性(访问控制)不同,struct是public的,而class是private的。但经过上网查资料才发现,除了这个不同之外,还有很多的知识点需要掌握。下面就听我一一道来~ 1、...
  • Struct和Class区别

    千次阅读 2019-04-15 22:09:28
    从语法上来讲,class和struct做类型定义时只有两点区别: 1.默认继承权限,如果不指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理; 2.成员的默认访问权限。class的成员默认是...
  • C++面试题一---Struct和Class区别

    千次阅读 多人点赞 2018-08-14 20:44:33
    C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的...既然这些它都能实现,那它和class还能有什么区别? **最本质的一个区别就是默认的访问控制: 默认的继承访问权限 struct是publ...
  • struct SRectangle { var width = 200 } class CRectangle { var width = 200 } 虽然两者写法看起来很像,其实区别还是很大的 1.类属于引用类型,结构体属于值类型 2.类允许被继承,结构体不允许被继承 3.类中的...
  • 本篇文章是对C++中structclass区别进行了详细的分析介绍,需要的朋友参考下
  • 数据类型:struct是值类型,class是引用类型。 值类型变量直接包含数据,赋值时也是值拷贝,或者叫深拷贝,所以多个变量的操作不会相互影响。 引用类型变量存储的是对数据的引用地址,后者称为对象,赋值时,是将...
  • C++中new与malloc的区别structclass区别
  • C/C++ struct和class区别详解

    千次阅读 2017-06-18 14:34:38
    先讲了CC++中struct (结构体) 之间的区别,再讲了C++中struct和class区别
  • 1.2 struct和class区别 在C++中 struct和class唯一的区别就在于 默认的访问权限不同 区别: struct 默认权限为公共 class 默认权限为私有 class C1 { int m_A; //默认是私有权限 }; struct C2 { int m_A; //...
  • c/c++中的struct和class区别

    千次阅读 2019-10-06 21:39:01
    1.C语言中的struct和c++中的class区别。 2.c++中的struct和c++中的class的区别。 下面分别介绍: 1.C语言中的struct和c++中的class的区别 C语言中的struct只能定义成员变量,不能够定义成员函数。如下所示: ...
  • C#中ClassStruct区别

    2020-01-23 20:06:58
    C#中ClassStruct区别 1)class 是引用类型,继承自System.Object;stuce是值类型,继承自System.ValueType类,因此不具多态性。但是注意,System.ValueType是个引用类型。 2)从职能观点来看,class表现为行为;...
  • 一、C的struct与C++的class区别 C的struct与c++的class有着非常明显的区别。C是一种过程化的语言,struct只是作为一种复杂数据类型定义,struct中只能定义数据成员与成员函数,不能使用面向对象编程。 二、C++中...
  • 在C++中,可以用struct和class定义类,都可以继承。 区别在于:structural的默认继承权限默认访问权限 是public,而class的默认继承权限默认访问权限是 private。另外,class还可以定义模板类形参,比如te mp...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 462,365
精华内容 184,946
关键字:

struct和class的区别