class和struct的区别

1、最主要的区别,默认的继承访问权限。struct是public的,class是private的。

2、关于使用大括号初始化

class和struct如果定义了构造函数的话,都不能用大括号进行初始化

如果没有定义构造函数,struct可以用大括号初始化。

如果没有定义构造函数,且所有成员变量全是public的话,可以用大括号初始化。

3、关于默认访问权限

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

4、关于继承方式

class继承默认是private继承,而struct继承默认是public继承。

5、其实二者在C++中的区别并不大

(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就不需要注意。

时间: 2024-10-21 10:14:13

class和struct的区别的相关文章

浅谈c++中class与struct的区别

本文主要讨论class与struct的区别.为什么是区别而不是共同点呢?因为在绝大部分情况下,class和struct其实是可以互相替换的, 那么区别到底有哪些呢,我总结了一下大概有如下3点: 1.成员的默认访问权限不同.如果我们使用struct关键字,则定义在第一个访问说明符之前的成员是public的:相反,如果我们使用class关键字,则这些成员是private的. class A //class { int x; public: A():x(0){} }; struct B<span st

class、interface、struct的区别

1 struct和class有什么区别 1.1默认的继承访问权限 Struct是public的,class是private的. 你可以写如下的代码: struct A { char a; }; struct B:A { char b; } 这个时候B是public继承A的.如果都将上面的struct改成class,那么B是private继承A的.这就是默认时的继承访问权限.所以我们在平时写类继承的时候,通常会这样写: struct B:public A 就是为了指明是public继承,而不是用默

C++中class与struct的区别(struct的类型名同时可以作为变量名)

通常我们知道的区别: (一)默认继承权限.如果不明确指定,来自class的继承按照private继承处理,来自struct的继承按照public继承处理: (二)成员的默认访问权限.class的成员默认是private权限,struct默认是public权限. 除了这两点,class和struct基本就是一个东西.语法上没有任何其它区别. 昨天发现一个不知道算不算是区别的东西: struct的类型名同时可以作为变量名,显然class是不可以的,也可以理解,因为class各类型变量定义时直接是类名

Swift中 Class和Struct的区别

类(Class)和结构体(Struct)区别 1.  内存管理方式不一样, 类引用类型, 分配在堆上. 结构体值类型,分配在栈上. 2. 类, 有析构. 结构体不能有析构, playground中测试直接卡死. 3. 结构体构造函数, 会自动生成带参数的构造器.类不会对有初始化赋值的属性, 生成带参数的构造器. 2. 类有继承特性,结构体没有继承特性,自然也不存在对成员属性和成员方法, 类属性和类方法的重载. 正因为结构体没有继承, 所以操作符函数, 需要static修饰, 而不能用class修

typedef struct和struct 的区别 用途

分三块来讲述:1 首先:      在C中定义一个结构体类型要用typedef:        typedef struct Student        {            int a;        }Stu;于是在声明变量的时候就可:Stu stu1;如果没有typedef就必须用struct Student stu1;来声明这里的Stu实际上就是struct Student的别名.另外这里也可以不写Student(于是也不能struct Student stu1;了)       

[C#基础知识]Class和Struct的区别

class和struct语法几乎相同,但其本质却截然不同:class是引用类型,struct是值类型,也就是说在内存中存储方式有别,由此产生的一系列差异性. class(类)是面向对象编程的基本概念,是一种自定义数据结构类型,通常包含字段.属性.方法.构造函数.索引器.事件等.在.NET中,所有的类都继承自System.Object类,是一种引用类型,也就是说,当我们new出一个类的实例时,对象保存了该实例实际数据的引用地址,而对象的值保存在托管堆中. struct(结构)是一种值类型,用于将一

typedef struct 和struct的区别

转载自:结构体定义 typedef struct 用法详解和用法小结 typedef是类型定义的意思.typedef struct 是为了使用这个结构体方便.具体区别在于使用时,是否可以省去struct这个关键字: 若struct node {}这样来定义结构体的话.在申请node 的变量时,需要这样写,struct node n; 若用typedef,可以这样写,typedef struct node{}NODE; .在申请变量时就可以这样写,NODE n; struct和typedef st

struct和typedef struct的区别

在C语言里常常见到 typedef struct ×××{}; 那么,它和 struct ×××{}; 有什么区别呢? 通过代码来研究C语言的结构体里有typedef和没有typedef的区别. 1 // 结构体Student没有用typedef进行修饰 2 3 #include <stdio.h> 4 5 struct Student { 6 int no; 7 }; 8 9 int main() 10 { 11 struct Student stu; // 此处必须使用[struct St

C++类class和结构体struct的区别

C++保留了C语言的 struct,并且加以扩充.在C语言中,struct 只能包含数据成员,不能包含成员函数.而在C++中,struct 类似于 class,既可以包含数据成员,又可以包含成员函数. 在C++中,struct 和 class 基本是通用的,唯一不同的是如果使用class关键字,类中定义的成员变量或成员函数默认都是private属性的,而采用struct关键字,结构体中定义的成员变量或成员函数默认都是public属性的. 在C++中,没有抛弃C语言中的 struct 关键字,其意