C++ 常用基础概念
C++ 常用基础概念
this 指针
- 每个对象都拥有一个指针:this指针,通过this指针来访问自己的地址。
- this指针的类型取决于使用this指针的成员函数类型以及对象类型。
- this指针并不是对象的一部分,this指针所占的内存大小是不会反应在sizeof操作符上的。
- this只能在成员函数中使用。全局函数,静态函数都不能使用this。
内存分配
- 编译器将内存分为三部分:静态存储区域、栈、堆。静态存储区主要保存全局变量和静态变量;栈存储调用函数相关的变量、地址等;堆存储动态生成的变量。
- 在c中由malloc,free库函数产生以及释放存储空间,在c++中由new和delete运算符产生以及释放存储空间。
创建对象
在C++中,只要有两种方法来创建对象:
方法一:
ClassName object(param);
这样就声明了一个ClassName类型的object对象,C++会为它分配足够的存放对象所有成员的存储空间。
注意:为节省存储空间,C++创建对象时仅分配用于保存数据成员的空间,而类中定义的成员函数则被分配到存储空间中的一个公用区域,由该类的所有对象共享。
这种方法创建的对象,内存分配是分配到栈中的,由C++缺省创建和撤销,自动调用构造函数和析构函数。该方法创建的对象调用类方法时,必须用“.”,而不能用“->”。
方法二:
ClassName *object=newClassName(param);
delete object;
这种方法跟Java有点类似,相同的是,它们都是在堆上分配内存来创建对象的(与上不同);不同的是,C++用new创建对象时返回的是一个对象指针,object指向一个ClassName的对象,C++分配给object的仅仅是存放指针值的空间。而且,用new动态创建的对象必须用delete来撤销该对象。只有delete对象才会调用其析构函数。
注意:new创建的对象不是用“*”或“.”来访问该对象的成员函数的,而是用运算符“->”;
多态
1.函数的入口地址与函数名是在编译时进行绑定的,我们称之为编译期绑定,而多态的功能则是将函数名动态绑定到函数入口地址,这样的动态绑定过程称为运行期绑定,换句话来说就是函数名与函数入口地址在程序编译时无法绑定到一起,只有等运行的时候才确定函数名与哪一个函数入口绑定到一起。
2.编译器绑定是指在程序编译时就将函数名与函数入口地址绑定在一起,运行期绑定是指在程序运行时才将函数名与函数入口地址绑定到一起,而在运行期绑定的函数我们称其是“多态”的。
3.要想形成多态必须存在以下关系:
* 必须存在继承关系;
* 继承关系中必须有同名的虚函数;
* 存在基类类型的指针和引用,通过该指针和引用调用虚函数;
virtual 关键字
1.virtual关键字仅用于函数声明;
2.在c++只有类中的成员函数能被申明为虚函数,而对于顶层函数则不能申明为虚函数;
原因:声明函数是为了构成多态,而构成多态的第一个条件就是需要继承关系,顶层函数很明显是不具备继承关系的,,因此也就不能被声明为虚函数了。
C++ 重载
函数重载是指两个函数具有相同的函数名,但函数的参数类型以及参数个数不同。函数重载多发生在顶层函数或者同一个类中,函数重载不需要构成继承关系。
注意:函数重载是编译期绑定的,所以他不具备多态特性。
纯虚成员函数
纯虚成员函数的声明语法如下:
virtual 函数返回类型 函数名(函数参数)=0
纯虚成员函数没有函数体,只有函数声明,在纯虚函数声明结尾加上“=0”表明此函数为纯虚成员函数。
注意:纯虚成员函数可以被派生类继承。
抽象基类
包含纯虚成员函数的类即为抽象基类,之所以说他抽象,那是因为无法实例化,也即无法用于创建对象。
注意:抽象基类用于实现公共接口,在抽象基类中声明的纯虚成员函数,派生类如果想要能够创建对象,则必须全部重新定义这些纯虚成员函数。
dynamic_cast操作符
原因:在C++中,编译期的类型转换有可能会在运行时出现错误,特别是涉及到类对象的指针或引用操作时,更容易产生错误。
功能:可用于在运行期对可能产生问题的类型转换进行测试。
typeid操作符
功能:typeid操作符用于判断表达式的类型。
注意:它和sizeof一样是一个操作符而不是函数,如果使用typeid操作符,最好加上typeinfo头文件。
C++ 常用基础概念相关推荐
- Linux基础概念及常用命令
Linux基础概念及常用命令 文章目录 Linux基础概念及常用命令 1 Linux概述 1.1 为什么要学Linux 1.2 Linux简介 1.3 Linux 发行版 1.4 Linux 应用领域 ...
- 常用色彩模式及基础概念整理
这篇将UI设计时的颜色模式,混合页面开发时的颜色设置,混在一起,整理了一下常用到的几种模式及其基础概念,其中标有 图标的,为 CSS 中可以直接使用的颜色模式. RGB 光色模式 由 红(R | R ...
- 基础组合计数常用的概念和方法总结
基础组合计数常用的概念和方法总结 一.组合计数中的基本概念与性质 1.排列 定义 性质 2.组合 定义 性质 二.组合计数中的一些常用技巧 1.容斥原理 定义 公式 2.捆绑与插空法 捆绑法 插空法 ...
- Redis基础 概念 数据类型 常用指令 Jedis 持久化
Redis基础 概念 数据类型 常用指令 Jedis 持久化 1. Redis 简介 1.1 NoSQL概念 1.1.1 问题现象 1.1.2 NoSQL的概念 1.2 Redis概念 1.2.1 r ...
- 逗比的输入法实现(二):基础概念和常用接口
为什么叫 Meow?因为这是给猫用的输入法... 目录 (一):基本情况 (二):基础概念和常用接口 (三):整体构架 (四):编辑和候选 (五):界面管理和无界面模式 (六):词库和候选算法 (七) ...
- Linux运维 第二阶段 (一)linux基础概念及常用命令
一.基础概念: 1.CPU(slice):运算器(线路复用).控制器(芯片针脚有电没电).寄存器(保存现场): interrupt(中断,硬件通知机制),FSB(frontside bus前端总线), ...
- 数据库基础笔记(MySQL)1 —— 基础概念
(写算法题目把自己心态搞崩了,休息两天顺便把之前学的数据库手写笔记记录在网上方便查阅,因为只是自己学的时候做的笔记,如果有错误欢迎大家指正,过两天再重回算法的怀抱哈哈) 如何下载配置 这个感觉视频讲的 ...
- 机器学习的9个基础概念和10种基本算法总结
https://blog.csdn.net/libaqiangdeliba/article/details/41901387 1.基础概念: (1) 10折交叉验证:英文名是10-fold cross ...
- 干货丨先搞懂这八大基础概念,再谈机器学习入门
翻译 | AI科技大本营 参与 | 林椿眄 准备好开始AI了吗?可能你已经开始了在机器学习领域的实践学习,但是依然想要扩展你的知识并进一步了解那些你听过却没有时间了解的话题. 这些机器学习的专业术语能 ...
最新文章
- 帝国时代三计算机丢失,修复安装帝国时代程序出错3d3dx9_25.dll丢失在win7中方法...
- ASP中的工具类函数收集
- php -- 检查是否存在
- 如何给远程计算机添加用户,如何访问远程计算机以添加/删除/管理用户帐户?...
- PCB-电解电容的封装
- 【华为云技术分享】【测试微课堂】 有的放矢制定测试计划
- 通过路由器的IP映射来解决,两个不同IP地址的PC机之间的从LAN口到WAN口的单向通讯问题
- 破碎的互联网下,加密技术正在恢复数据主权!
- mysql索引统计信息更新_MySQL索引统计信息更新相关的参数
- MTK:文件操作接口详解
- Numpy——numpy的基本运算
- Eclipse 反编译之 JadClipse
- 一个bat文件运行多个java jar包
- glEnable(GL_DEPTH_TEST)作用
- html 如何清除历史记录,如何删除网页历史记录?
- 路由追踪测试软件,路由追踪命令是什么 使用路由追踪的技巧
- 品牌对比 蜜雪冰城 VS 喜茶
- 【无标题】SONET基本术语
- 多块英伟达K80显卡linux安装,ubuntu14.04下NVIDIA Tesla K80 、GTX1080顯卡驅動以及Tensorflow、Python的安裝教程...
- ES索引生命周期管理ILM
热门文章
- assets bitmap 转_图片文件和Bitmap之间的转换
- numpy 数组访问方式_索引、切片、迭代
- Pytorch之Variable与tensor--它封装了Tensor,并整合了反向传播的相关实现,像装糖果(糖果就是数据即tensor)的盒子
- 10.1自动机器学习Auto_ML
- 利用IDEA创建hadoop文件
- UMEditor调整文本编辑器的组件位置的方法
- DreamweaverCS6搭建配置php本地站点(图文教程)- 教程篇
- Bootstrap鼠标悬停下拉导航总结
- linux查看缓存的文件,linux – 如何查看缓冲和缓存的数据
- mysql 存储过程遍历_Mysql创建存储过程及遍历查询结果