struct与class的区别
C++中的struct是对C中struct的扩充,它已经不再只是一个包含不同数据类型的数据结构,因为其扩充了太多功能。总的来说,C++中struct和class极其相似,比如,struct能包含成员函数、能继承、能实现多态等。但是二者之间也存在着不可忽视的区别,如下:
1) 默认的继承访问权限不同。struct默认是public继承,class默认是private继承。
子类属于哪种继承取决于子类而不是基类,也就是说struct可以继承class,class也可以继承struct,默认的继承访问权限就取决于子类是struct还是class。如果不想使用默认的继承方式,可以指明使用哪种继承。如下:
struct A{};
class B : A{}; //private继承
struct C : B{}; //public继承
2) struct作为数据结构的实现体,它默认的数据访问控制是public的,而class作为对象的实现体,它默认的成员变量访问控制是private的。
虽然struct和class使用时基本可以互换,但是还是应该用struct处理更像数据结构的场景,用class处理更像对象的场景。
3) class关键字还用于定义模板参数,但是struct不用于定义模板参数
4) struct在定义时,如果内部没有构造函数和虚函数,可以用{}赋初值(用初始化列表对数据进行按顺序的初始化),而class不能这样初始化,除非使用和struct一样的public继承。这里struct体现出数据结构的特性,而不是类的特性。如果struct内部有构造函数或虚函数,那么就无法使用{}赋初值,这时struct表现得更像class。参考文献:
struct与class的区别的更多相关文章
- C#中struct和class的区别详解
本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建 ...
- C++学习基础十三——struct和class的区别
来自:http://blog.sina.com.cn/s/blog_48f587a80100k630.html C++中的struct是对C中struct进行了扩展,它不单是一个包含不同数据类型的数据 ...
- C#中struct和class的区别详解 (转载)
本文详细分析了C#中struct和class的区别,对于C#初学者来说是有必要加以了解并掌握的. 简单来说,struct是值类型,创建一个struct类型的实例被分配在栈上.class是引用类型,创建 ...
- c#中struct和class的区别 详细[转]
转自:http://blog.csdn.net/justlovepro/archive/2007/11/02/1863734.aspx 有这么几点不同: 1.struct 是值类型,class是对象类 ...
- C#中Struct与Class的区别
class和struct最本质的区别是class是引用类型,而struct是值类型,它们在内存中的分配情况有所区别. 什么是class? class(类)是面向对象编程的基本概念,是一种自定义数据结构 ...
- C++中的struct和class的区别
C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能.struct能包含成员函数吗? 能!struct能继承吗? 能!!stru ...
- C#经典面试题 C# 中 Struct 与 Class 的区别,以及两者的适用场合
在一家公司面试时,第一个问题就是问到这个 转载 文章 http://www.cnblogs.com/waitrabbit/archive/2008/05/18/1202064.html 来解释此问题 ...
- 【zz】C++中struct与class的区别
转载来源:http://blog.sina.com.cn/s/blog_48f587a80100k630.html C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据 ...
- C++中struct和class的区别 [转]
一. C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能. struct能包含成员函数吗? 能! struct能继承吗? ...
随机推荐
- Qt 图像缩放显示
1. QImage Image; Image.load(":/images/f1.png"); QPixmap pixmap = QPixmap::fromImage(Image) ...
- Laravel 多数据库配置及查询操作
laravel文档好像没有写得很详细 https://docs.golaravel.com/docs/5.3/database/ Using Multiple Database Connections ...
- java入门需了解的历史
1991年,Sun公司的Green项目,Oak 1995年,推出Java测试版 1996年,JDK1.0 1997年,JDK1.1 1998年,JDK1.2,大大改进了早期版本的缺陷,是一个革命性的版 ...
- Java的家庭记账本程序(I)
日期:2019.2.26 博客期:037 星期二 Part 1: 今天使用新的"radio"标签,将搜索方式的选则内容更改了,如下图,不过,研究了很久的数据库连接也还是没有成功!嗯 ...
- Nginx Linux详细安装部署教程
一.Nginx简介 Nginx是一个web服务器也可以用来做负载均衡及反向代理使用,目前使用最多的就是负载均衡,具体简介我就不介绍了百度一下有很多,下面直接进入安装步骤 二.Nginx安装 1.下载N ...
- SQL 安装MySQL
假设学员的电脑是Windows系统,如Windows7,需要准备以下软件 Microsoft .NET Framework 4.5 Visual C++ Redistributable for Vis ...
- scrapy_redis 相关: 查看保存的数据
0.参考资料 https://redis.io/topics/data-types-intro An introduction to Redis data types and abstractions ...
- excel数据导入mysql
先把excel数据另存成txt文件 Load Data InFile 'D:/1.txt' Into Table `res_type_collect` fields terminated by '@‘ ...
- labview出现系统998错误
1.环境:xp,labview2015, 2.经过:初始状态正常,系统需要运行2016的打包的程序,运行不了,后下载了一个2016打包后的程序,点击安装,未提示异常.桌面添加了快捷方式,点击快捷方式, ...
- Hbase命令
进入hbase shell命令行 bin/hbase shell HBase Shell; enter 'help' for list of supported commands. Type &quo ...