C++ 虚函数相关
多态
C++的封装、继承和多态三大特性,封装没什么好说的,就是把事务属性和操作抽象成为类,在用类去实例化对象,从而对象可以使用操作/管理使用它的属性。
至于继承,和多态密不可分。基类可以进行派生,而派生类则是继承基类或称父类,把基类中属性和方法拿过来,变成自己的一部分,其中需要较为精细的思考。
多态则是一种实现多种使用的手法,这样的说法不太准确。静态多态(编译时多态)我觉得是函数重载,不再赘述了,要注意的是重载函数的二义性(PS.Tencent interview TEG)。动态多态/运行时多态,又称动态绑定。动态绑定的基础是虚函数和使用基类指针或引用调用基类函数,只要用virtual声明了虚函数,那么它的调用对象就要运行时才能确定。它的实现机制在《深度探索对象模型》中有较为晦涩的解释。
基类指针或是引用调用虚函数会发生运行时绑定,但是非虚函数则不会,还是编译时绑定,它的动态类型和静态类型是一致的。
纯虚与抽象
虚函数声明尾连接 “= 0” 是的该该虚函数成为纯虚函数,作为接口,供派生类覆盖实现。
含有纯虚函数的类是抽象类,不能进行实例化,只能作为基类供子类继承以实现声明的纯虚函数。
(实例化抽象类的错误信息)
一个例子
#include <iostream>
using namespace std; //抽象基类
class abstract
{
protected:
int m;
public:
string name;
public:
abstract() = default;
~abstract() = default;
virtual void set(string _name) = ;
virtual string get() const = ;
}; //派生类
class Son : public abstract
{
private:
int count;
public:
Son() = default;
~Son() = default;
void set(string _name) override;
string get() const override;
}; void Son::set(string _name)
{
this->name = _name;
this->count = ;
this->m = ;
} string Son::get() const
{
return this->name + to_string(this->m);
} int main()
{
Son s;
s.set("yoci");
cout << s.get() << endl; return ;
}
访问控制
private:仅类内可见,其他不可见;
protected : 类内可见,派生类可见;
public:都可访问。
基类虚析构
一般我们把基类的析构函数设置成为虚函数,且采用默认实现的版本。
是为了避免,使用动态绑定时,基类指针指向派生类对象并进行析构时,采用(静态类型)基类析构函数而出现错误的情况。
C++ 虚函数相关的更多相关文章
- C++ 虚函数相关,从头到尾捋一遍
众所周知,C++虚函数是一大难点,也是面试过程中必考部分.此次,从虚函数的相关概念.虚函数表.纯虚函数.再到虚继承等等跟虚函数相关部分,做一个比较细致的整理和复习. 虚函数 OOP的核心思想是多态性( ...
- C++虚函数相关内容
样例代码 class Base{public: Base(){}; virtual ~Base(){ //若没有设置为虚函数:如果有这样的指针Base *p=new Derived();声明,则 ...
- cocos2d-x 运行时xcode提示错误:"vtable for XXX", referenced from 问题已解决;
vtable/引用和虚函数相关,今天在添加一个层的时候报了这个错误,很低级的错误,忘了实现虚函数了(谨记!!) 若如果实现了虚函数还依然如此的话,可能是创建的时候忘了钩上 -desktop 选项了,把 ...
- 面试相关-转载-well,yzl——持续更新
转载yl,yzl大神的面经,顺便自己复习一下专业课的内容 操作系统相关: 什么是进程, 什么是线程.它们之间的区别和联系. 进程管理内存资源+运行过程, 线程只管理运行过程, 线程要在进程提供的资源基 ...
- (已解决)cocos2d-x 运行时xcode提示错误:"vtable for XXX", referenced from;
vtable/引用和虚函数相关,今天在添加一个层的时候报了这个错误,很低级的错误,忘了实现虚函数了(谨记!!) 若如果实现了虚函数还依然如此的话,可能是创建的时候忘了钩上 -desktop 选项了,把 ...
- 编写高质量代码_改善C++程序的150个建议 读书笔记
这几天看了下这本书<编写高质量代码_改善C++程序的150个建议>,觉的蛮有收获的,再次记录下自己以前不清晰的知识点,以供学习. 编写符合标准的main函数 C语言标准规定了main函数的 ...
- C++面试高频题
作者:守望者1028链接:https://www.nowcoder.com/discuss/55353来源:牛客网 面试高频题: 校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我也忘记了 ...
- C++类大小的计算
这里记录一下怎么计算类对象的大小. 大概总结下,类的大小需要考虑以下内容: 非静态成员变量大小 数据对齐到多少位 有无虚函数(即需不需要指向虚函数表的指针,如果考虑继承的情况,则还需要看继承了多少个指 ...
- C++中的多重继承(二)
1,本文分析另一个多重继承问题及其工程中的解决方案,单继承加多接口实现的开发方式: 2,多重继承的问题三: 1,多重继承可能产生多个虚函数表: 1,实际工程中可能造成不可思议的问题,并且这些问题很难以 ...
随机推荐
- CentOS7下搭建zabbix监控(二)——Zabbix被监控端配置
Zabbix监控端配置请查看:CentOS7下搭建zabbix监控(一)——Zabbix监控端配置 (1).在CentOS7(被监控端)上部署Zabbix Agent 主机名:youxi2 IP地址: ...
- notepad++(NPP)更换主题颜色
NPP主题网站:https://lonewolfonline.net/notepad-colour-schemes/ 笔者下载了Nord Notepad++ Theme 然后打开%AppData%\N ...
- php关于文件上传的两个配置项说明
; Maximum allowed size for uploaded files.; http://php.net/upload-max-filesizeupload_max_filesize = ...
- SQL Server中的加密
参考文献: 细说SQL Server中的加密 Transparent Data Encryption (TDE) Database Encryption Key (DEK) management SQ ...
- Python3之多重继承
继承是面向对象编程的一个重要的方式,因为通过继承,子类就可以扩展父类的功能. Animal类层次的设计,假设我们要实现以下4中动物 Dog-狗狗 Bat-蝙蝠 Parrot-鹦鹉 Ostrich-鸵鸟 ...
- iOS技术面试03:Foundation
是否可以把比较耗时的操作放在NSNotificationCenter中 如果在异步线程发的通知,那么可以执行比较耗时的操作: 如果在主线程发的通知,那么就不可以执行比较耗时的操作 3.Foundati ...
- netstat -anp/ss -t里的Send-Q和Recv-Q含义
Send-Q 对方没有收到的数据或者说没有Ack的,还在本地缓冲区 Recv-Q 数据已经在本地接收缓冲区,但是还没有recv() The count of bytes not copied by t ...
- CentOS 7中安装和配置Promethues
Prometheus 是什么? Prometheus是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的.随着发展,越来越多公司和组织接受采用Prome ...
- 成为java架构师的技能
0: 数据结构算法 数组.链表.堆.栈.队列.Hash表.二叉树等; 算法思想:递推.递归.穷举.贪心.分治.动态规划.迭代.分枝界限; 排序查找 B+/B-数.红黑树.图等; 图的深度优先搜索.图的 ...
- mysql 按照配置文件启动
有时,我们的机器上面装了很多个mysql,但只有一个3306端口,其余的mysql服务器需要重新指定端口.我们需要多个配置文件来启动它们.那么我们怎么通过指定配置文件的方式来启动呢? 例如,按 ...