C++总结学习(一)
继承:
- 公有继承
class A : public B 可以调用父类的成员函数,或成员变量 - 保护继承
class A : protected B - 私有继承
class A : private B
如果继承方式是public的,基类成员访问属性 继承方式 派生类成员访问属性
类型 | 基类 | 访问权限 |
---|---|---|
private成员 | public | 无法访问 |
protected成员 | public | protected |
public成员 | public | public |
友元
- 借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数访问当前类的 private 成员。
- 一个函数可以被多个类声明为友元函数,这样就可以访问多个类中的 private 成员。
- 友元的关系是单向的而不是双向的。如果声明了类 B 是类 A 的友元类,不等于类 A 是类 B 的友元类,类 A 中的成员函数不能访问类 B 中的 private 成员。
- 友元的关系不能传递。如果类 B 是类 A 的友元类,类 C 是类 B 的友元类,不等于类 C 是类 A 的友元类。
- 友元函数不是成员函数,用法也与普通的函数完全一致,只不过它能访问类中所有的数据,友元函数破坏了类的封装性和隐蔽性,使得非成员函数可以访问类的私有成员。一个类的友元可以自由地用该类中的所有成员。必须将对象名或对象的引用作为友元函数的参数,这样才能访问到对象的成员。
析构函数
和构造函数类似,析构函数也不能被继承。与构造函数不同的是,在派生类的析构函数中不用显式地调用基类的析构函数,因为每个类只有一个析构函数,编译器知道如何选择,无需程序员干涉。
作用域
- 类作用域、类类型的作用域和对象有
类体的区域称为类作用域,类的成员函数与成员数据,其作用域都是类的作用域 - 类类型的作用域,在函数定义之外定义的类,其类名的作用域为文件作用域为块作用域
- 对象的作用域与前面介绍的变量作用域完全相同,全局对象、局部对象、局部静态对象等
类的嵌套
- 在定义一个类时,在其类体中以包含一个完整定义,称为类的嵌套,类是允许嵌套定义的
对对象成员的构造的调用顺序取决于这些对象成员在类中说明的顺寻,注意是类中的说明顺序,与它们在成员初始化列表中的顺序无关。当建立ClassName的对象时,先调用各个对象成员的构造函数,初始化相应的对象成中,然后才执行类ClassName的构造函数,初始化类ClassName中在的其它成员。
构造函数不能被继承,派生类的构造函数必须调用基类的构造函数来初始化基类的构造函数来初始化基类成员基类子对象。
派生类的构造函数的调用顺序如下:
- 基类的构造函数
- 子对象类的构造函数
- 派生类的构造函数
虚函数
- 多态:调用同一个函数名,可以根据需要但实现不同的功能。
- 主要是运行时多态。
- 若要访问派生类中相同名字的函数,必须将基类中同名函数定义为虚函数,这样,将不同的派生类对象的地址赋值给基类指针变量后,就可以动态的调用不同类中的函数。
- 在派生类中重新定义基类中的虚函数时,可以不用关键字virtual来修饰这个成员函数。
- 在程序执行过程中,依据指针具体指向哪个对象,或依据引用哪个类对象,才能确定激活哪个版本,实现动态聚束。
C++总结学习(一)相关推荐
- java入门 慕路径,Java入门基础知识总结学习教程大全【必看经典】
类型的表达式,是循环条件,表达式3是党执行了一遍循环之后,修改控制循环的变量值. ??? for语句的执行过程是这样的:首先计算表达式1,完成必要的初始化工作:然后判断表达式2的值,如果表达式的值为t ...
- Java EE学习心得
–Java EE学习心得 1. 称为编程专家的秘诀是: 思考-----编程--------思考------编程--.. 编程不能一步到位,不能一上来就编,必须先思考如何写,怎样写?然后再编程 ...
- FastAI 2019课程学习笔记 lesson 2:自行获取数据并创建分类器
文章目录 数据获取 google_images_download 的安装和使用 挂载google 个人硬盘到Google colab中 删除不能打开文件 创建ImageDataBunch 训练模型 解 ...
- FastAI 课程学习笔记 lesson 1:宠物图片分类
文章目录 代码解析 神奇的"%" 导入fastAI 库 下载解压数据集 untar_data 获取帮助文档 help() ? ?? doc 设置路径 get_image_files ...
- 深度学习学习指南-工具篇
colab Colab是由Google提供的云计算服务,通过它可以让开发者很方便的使用google的免费资源(CPU.GPU.TPU)来训练自己的模型. 学习经验总结 如何使用命令行? 通过!+cmd ...
- Redis学习之路(一)--下载安装redis
redis学习之路--下载安装redis windows安装redis 1.下载redis 2.安装 3.查看是否安装成功 windows安装redis 1.下载redis 网址:https://gi ...
- python内置库之学习configparser库(一)
python内置库之学习configparser库(一) 1.引言 ini文件简介 [节] 键=值 注:节不能重复出现 2.自己封装了一个增删改查的类,可以参考一下 import configpars ...
- 前端Vue学习之路(二)-Vue-router路由
Vue学习之路 (二) Vue-router(基础版) 一.增加静态路由 二.动态路由+路由嵌套+404页面 三. 编程式导航 四.命名路由 五.命名视图 六.重定向和起别名 1.重定向 2.起别名 ...
- 前端Vue学习之路(一)-初识Vue
Vue学习之路 (一) 1.引言 2.更换npm国内镜像源 3.用npm下载Vue 4.Vue全家桶 5.使用命令创建项目 5.推荐插件 6.推荐网站 7.学习扩展 1.引言 先安装node.js环境 ...
- 如何学习数据挖掘和数据科学的7个步骤
前言 概括 1 学习语言 2 工具:数据挖掘,数据科学和可视化软件 3 教科书 4 教育:网络研讨会,课程,证书和学位 5 数据 6 比赛 7 互动:会议,团体和社交网络 more 前言 最近一直一再 ...
最新文章
- Java Arrays.Sort方法重写
- Eclipse的Ctrl+鼠标左键的智能化链接配置
- Google谷歌首席科学家:神经网络的奇妙特性与应用
- GitBash上传项目出现[fatal: remote origin already exists.]问题解决方案
- 关于SmartForm和ScriptForm的输出格式设置说明(转载)
- bzoj 1024 [SCOI2009]生日快乐——模拟
- visual studio 判断dropdownlist选的是什么_心理测试:五个小蓝人,你选哪个?测你是不是一个容易追求的人...
- Emgu.CV.CvInvoke的类型初始值设定项引发异常
- [UE4] 虚幻4学习---UE4中的字符串转换
- 打造可用的梅花6硬键盘
- 秀动app抢票脚本_程序员硬核quot;Python抢票教程”,帮你抢回家车票
- HDD硬盘在数据中心的持续价值
- 进阶mapbox GL之paint和filter
- 对回合制游戏的探讨以及想法
- macOS Big Sur 11.0 B2(20A4300b)原版镜像
- MySQL编程实战三之求任务执行批次号
- xshell选项卡不见了
- 用Pytest+Allure生成漂亮的HTML图形化测试报告(废弃)
- 英特尔凌动处理器_英特尔Daniel Rodriguez:驾驭2020云网融合浪潮 | 5G on IA
- Java——接收用户在控制台的信息,将取到的信息写入lianxi.txt文件中,并且将lianxi.txt内容复制到home.txt中