文章目录

  • 一. 什么是右值引用,跟左值又有什么区别?
  • 二. 面向对象的三大特征
  • 三. c++中四种cast转换
  • 四、拷贝构造函数和赋值运算符的认识
  • 五、 对虚函数和多态的理解

一. 什么是右值引用,跟左值又有什么区别?

左 值 和 右 值 的 概 念 :
左值:能取地址,或者具名对象,表达式结束后依然存在的持久对象;
右值:不能取地址,匿名对象,表达式结束后就不再存在的临时对象;

区别:
左值能寻址,右值不能;
左值能赋值,右值不能;
左值可变,右值不能(仅对基础类型适用,用户自定义类型右值引用可以通过成员函数改变);

二. 面向对象的三大特征

  • 封装性:将客观事物抽象成类,每个类对自身的数据和方法实行 protection (private , protected ,
    public )。
  • 继承性:广义的继承有三种实现形式:实现继承(使用基类的属性和方法而无需额外编码的能力)、可 视继
    承(子窗体使用父窗体的外观和实现代码)、接口继承(仅使用属性和方法,实现滞后到子类实现)。
  • 多态性:是将父类对象设置成为和一个或更多它的子对象相等的技术。用子类对象给父类对象赋值 之后,父
    类对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。

三. c++中四种cast转换

C + + 中 四 种 类 型 转 换 是 : s t a t i c _ c a s t , d y n a m i c _ c a s t , c o n s t _ c a s t, r e i n t e r p r e t _ c a s t

1 、 c o n s t _ c a s t
用于将const变量转为非const
2 、 s t a t i c _ c a s t
用于各种隐式转换,比如非const转const,void*转指针等, static_cast能用于多态向上转化,如果向下转能
成功但是不安全,结果未知;
3 、 d y n a m i c _ c a s t 用 于 动 态 类 型 转 换 。 只 能 用 于 含 有 虚 函 数 的 类 , 用 于 类 层 次 间 的 向 上 和 向 下 转 化 。 只 能 转 指 针 或 引 用 。 向 下 转 化 时 , 如 果 是 非 法 的 * * * 对 于 指 针 返 回 N U L L , 对 于 引 用 抛 异 常 * * * 。 要 深 入 了 解 内 部 转 换 的 原 理
向上转换:指的是子类向基类的转换
向下转换:指的是基类向子类的转换
它 通 过 判 断 在 执 行 到 该 语 句 的 时 候 变 量 的 运 行 时 类 型 和 要 转 换 的 类 型 是 否 相 同 来 判 断 是 否 能 够 进 行 向 下 转 换 。
4 、 r e i n t e r p r e t _ c a s t
几乎什么都可以转,比如将int转指针,可能会出问题,尽量少用;

5 、 为 什 么 不 使 用 C 的 强 制 转 换 ?
C的强制转换表面上看起来功能强大什么都能转,但是转化不够明确,不能进行错误检查,容易出错。

四、拷贝构造函数和赋值运算符的认识

拷 贝 构 造 函 数 和 赋 值 运 算 符 重 载 有 以 下 两 个 不 同 之 处 :
拷贝构造函数生成新的类对象,而赋值运算符不能。
由于拷贝构造函数是直接构造一个新的类对象,所以在初始化这个对象之前不用检验源对象 是否和新建对象
相同。而赋值运算符则需要这个操作,另外赋值运算中如果原来的对象中有内存分配要先把内存释放掉。
注 意 : 当 有 类 中 有 指 针 类 型 的 成 员 变 量 时 , 一 定 要 重 写 拷 贝 构 造 函 数 和 赋 值 运 算 符 , 不 要 使 用 默 认 的

五、 对虚函数和多态的理解

多 态 的 实 现 主 要 分 为 静 态 多 态 和 动 态 多 态 , 静 态 多 态 主 要 是 重 载 , 在 编 译 的 时 候 就 已 经 确 定 ; 动 态 多 态 是 用 虚 函 数 机 制 实 现 的 , 在 运 行 期 间 动 态 绑 定 。 举 个 例 子 : 一 个 父 类 类 型 的 指 针 指 向 一 个 子 类 对 象 时 候 , 使 用 父 类 的 指 针 去 调 用 子 类 中 重 写 了 的 父 类 中 的 虚 函 数 的 时 候 , 会 调 用 子 类 重 写 过 后 的 函 数 , 在 父 类 中 声 明 为 加 了 v i r t u a l 关 键 字 的 函 数 , 在 子 类 中 重 写 时 候 不 需 要 加 v i r t u a l 也 是 虚 函 数 。

虚 函 数 的 实 现 : 在 有 虚 函 数 的 类 中 , 类 的 最 开 始 部 分 是 一 个 虚 函 数 表 的 指 针 , 这 个 指 针 指 向 一 个 虚 函 数 表 , 表 中 放 了 虚 函 数 的 地 址 , 实 际 的 虚 函 数 在 代 码 段 ( . t e x t ) 中 。 当 子 类 继 承 了 父 类 的 时 候 也 会 继 承 其 虚 函 数 表 , 当 子 类 重 写 父 类 中 虚 函 数 时 候 , 会 将 其 继 承 到 的 虚 函 数 表 中 的 地 址 替 换 为 重 新 写 的 函 数 地 址 。 使 用 了 虚 函 数 , 会 增 加 访 问 内 存 开 销 , 降 低 效 率 。

面试准备每日五题:C++(七)——左值右值、面向对象、四种cast转换、拷贝构造函数赋值、虚函数多态相关推荐

  1. 面试准备每日五题:C++(六)——CC++、staticconstextern、sizeof strlen、指针引用、数组指针指针数组函数指针

    文章目录 一.C和C++的区别是什么? 二.关键字static.const.extern作用 三.sizeof和strlen的区别 四.指针和引用的区别 五 .指针数组.数组指针.函数指针 一.C和C ...

  2. 面试准备每日五题:C++(二)——mallocnew、宏、volatile、constvolatile、(a)和(a)

    文章目录 1.C语言的 malloc 和 C++ 中的 new 有什么区别 2. 写一个 "标准"宏MIN 3. 介绍 volatile 及其作用 4. 一个参数可以既是const ...

  3. 面试准备每日五题:C++(四)——typedefdefine、指针常量、队列栈、地址赋值、C和C++结构体

    文章目录 1. typedef 和define 有什么区别 2. 指针常量与常量指针区别 3. 简述队列和栈的异同 4. 设置地址为0x67a9 的整型变量的值为0xaa66 5.C语言的结构体和C+ ...

  4. 面试准备每日五题:C++(十)——mapset、set查找、迭代器实现、set低层原理

    文章目录 1. 为何map和set的插入删除效率比其他序列容器高,为何map和set每次Insert之后,以前保存的iterator不会失效? 2. 当数据元素增多时(从10000到20000),ma ...

  5. 面试准备每日五题:C++(九)——vector、list、deque、priority_queue、mapset

    文章目录 1. 正确释放vector的内存(clear(), swap(), shrink_to_fit()) 2. list的底层原理 3. 什么情况下用vector,什么情况下用list,什么情况 ...

  6. 面试准备每日五题:C++(八)——重写重载隐藏、vector相关

    文章目录 1. 重写.重载和隐藏 2. 链表和数组有什么区别 3. vector的底层原理 4. vector的reserve和resize 5.vector迭代器失效的情况 1. 重写.重载和隐藏 ...

  7. 面试准备每日五题:C++(五)——野指针、句柄指针、newdeletemallocfree、extern、类成员权限

    文章目录 1. 如何避免"野指针" 2. 句柄和指针的区别和联系是什么? 3. new/delete与malloc/free的区别是什么 4. 说一说extern"C&q ...

  8. 面试准备每日五题:C++(三)——全局局部变量、内存分配、strcpysprintfmemcpy、函数指针、引用

    文章目录 1. 全局变量和局部变量有什么区别?是怎么实现的?操作系统和编译器是怎么知道的? 2. 简述C.C++程序编译的内存分配情况 3. 简述strcpy.sprintf 与memcpy 的区别 ...

  9. 面试准备每日五题:C++(一)——变量定义声明、#ifdef #else、结构体赋值、sizeof strlen、C和C++的static

    文章目录 1 变量的声明和定义有什么区别? 2 简述#ifdef.#else.#endif和#ifndef的作用 3 结构体可以直接赋值吗? 4 sizeof 和strlen 的区别 5 C 语言的关 ...

最新文章

  1. mysql三次握手_一文彻底搞懂 TCP三次握手、四次挥手过程及原理
  2. angular 代码高亮_angular 搜索/查找关键字高亮
  3. Linux学习:gcc 编译其他常用参数
  4. boost::successive_shortest_path_nonnegative_weights用法的测试程序
  5. java+springmvc+vo,springmvc+mybatis的实例详解
  6. uva 11971 Polygon
  7. 双胞胎一个上北大一个上清华,秘诀6个字!还有女生收到清华通知书说“考砸了”……...
  8. mysql期末考试试卷_mysql试题
  9. The content of elements must consist of well-formed character data or markup
  10. Security中常见的权限控制方式
  11. C# 、.NET、ASP.NET MVC积累
  12. xp的guest访问
  13. 利用Linux系统实现VLAN间的单臂路由及安全网关的功能
  14. go语言复数包_复数 | Go语言圣经
  15. php laravel mix,Laravel框架 之 Mix
  16. WIN32 opengl绘制一个点
  17. 【报错解决】Parameter ‘XXXX‘ not found. Available parameters are [XXXX1, XXXX2]
  18. 用Python获取Amazon亚马逊的商品信息
  19. 从第三方企业邮箱迁移至Office 365(21V) Exchange Online
  20. 微信授权文件放到域名根目录

热门文章

  1. 在ASP.NET MVC应用程序中实现Server.Transfer()类似的功能
  2. Python结合Shell/Hadoop实现MapReduce
  3. 变通实现微服务的per request以提高IO效率(三)
  4. 考英语四级误用六级题 千余考生困教室4个小时
  5. SpringSocial业务系统与社交网站的绑定与解绑
  6. httpclient在获取response的entity时报异常
  7. 数据库mysql:MySQL软件安装
  8. 在实际项目中,如何选择合适的机器学习模型?
  9. 题目1120:全排列
  10. C++课堂作业_02_PAT1025.反转链表