继承易错总结

1.继承会将所有的成员继承下来,但是继承方式限定的是继承下来成员的可见类型(如果是private继承,那么他不论哪里都是不可见的;如果是protected继承在类中是可见的,在类外是不可见的;如果是public继承,在任何地方都是可见的)

2.对于静态成员变量,不计入字节大小

3.虚函数类外定义时,不必加virtual

4.编译时多态——静态多态——模板和重载
运行时多态——动态多态——虚函数

友元函数 构造函数 static静态函数 不能用virtual关键字修饰;
普通成员函数 和析构函数 可以用virtual关键字修饰;

静态成员变量类内声明类外初始化
静态成员变量为什么不能设置为虚函数:
静态成员函数不属于任何成员,属于整个类,不能使用this来访问
virtual构成的虚函数,恰恰是使用this指针访问,this->vfptr-> 虚函数地址
静态成员函数没有this指针,实现多态就是需要不同的对象,调用不同的子类进行访问不同的重写函数

class A
{static int _tem;//静态成员变量类内声明,类外初始化
};int A::_tem = 0;//在类外初始化的时候不加static

静态成员变量会继承使用权,但是不能被包含
静态成员变量不存储在类中,计算类的大小的时候不计算他的字节大小

重载:同一个作用域中,函数名相同,参数类型不同,参数数量不同,参数顺序不同
重定义(隐藏):继承中,函数名相同(可使用作用域进行访问)
重写(覆盖):继承的虚函数中,子类重写父类的虚函数

派生类的构造函数,不写会调用默认的构造函数,但是如果自己写,就要自己调用父类的构造函数(在调用父类的构造函数时,要将父类当成一个整体)

class Base
{
public:Base(){puts("Base()");}Base(int a):_a(a){puts("Base(int a)");}Base(const Base& tem){puts("Base(const Base& tem)");}Base& operator=(const Base& tem){puts("Base& operator=(const Base& tem)");_a = tem._a;return *this;}~Base(){puts("Base");}
private:int _a;
};
class Son:public Base
{
public:Son(){puts("Son()");}Son(int a, int b):Base(a),_b(b){puts("Son(int a,int b)");}Son(const Son& tem):Base(tem){//父类接受子类的对象/引用/指针puts("Son(const Son& tem)");}Son& operator=(const Son& tem){puts("Son& operator=(const Son& tem)");Base::operator=(tem);return *this;}~Son(){//在析构函数的时候,可以不手动调用析构函数//编译器会自动调用父类的析构函数puts("~Son()");}
private:int _b;
};

inline能不能是虚函数:可以(内敛函数没有地址)
多态调用:内敛不起作用(多态调用中,虚函数存在虚函数表中,需要地址,但是内联函数没有地址,所以内敛不起作用)
普通调用:内敛起作用

构造函数能不能是虚函数?不能
虚表是在编译时生成,构造的时候进行初始化
如果构造函数是虚函数,那么在实例化对象的时候,如何应该去虚表中找构造函数的地址,但是这时候虚表还没有初始化

多态调用和普通函数的时间效率?
具体要看是否构成多态,调用需要到需表中找地址进行调用,普通成员函数可以直接调用

多态的本质——虚表
当父类的指针/引用接收子类的地址/对象时,因为是继承会进行切割,将子类的父类那部分切出来,剩下的就是去虚表中找地址进行调用就行了

父类=子类;会将父类的那部分切出来拷贝给父类,但是不会拷贝虚函数表指针
虚函数指针如果进行了拷贝,那么父类对象的虚函数表指针会发生改变,当使用父类对象调用父类的虚函数时,就会发生错误

虚函数继承,继承的是接口,参数类型不会改变;当子类对象要调用父类的函数时,使用切片的手法进行调用
普通函数继承,继承的是实现


子类和父类都有虚函数,子类的虚函数会存到哪里
在这里插入图片描述

从右表中可以看到,应该是有三个虚函数,他们在同一个虚表中
子类中没有虚表,子类的虚函数存到父类的虚表中

在这里插入图片描述

可以记成向上合并

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/530864.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hhkb适合写java吗_起底这届HHKB最强新品键盘,究竟好在哪儿?

2019年12月HHKB上市了3大品类的12款新品键盘,今天为大家分享外设天下为HHKB Professional HYBIRD Type-S 双模静音旗舰版静电容键盘做的评测,起底这届HHKB新品的最强新品。近日,HHKB更新了旗下的在售产品系列,为了满足严肃、安静办…

elementui树形复选框,element-ui checkbox 组件的树形联动

前言示例版本为 Element-ui 2.13.0 Vue 2.6.11最近想弄 Element-ui checkbox 的多级联动,网上相关的例子大多数为二级联动,自己研究了一下,弄了一个树形菜单的多级联动,常用于角色管理等业务。(仅供参考,未考虑性能问…

java 先入先出,java_阻塞队列(FIFO先进先出)

java_阻塞队列(FIFO先进先出)ArrayBlockingQueue:由数组结构组成的有界阻塞队列;LinkedBlockingQueue:由链表结构组成的有界阻塞队列(但大小默认值为:Integer.MAX_VALUE);PriorityBlockingQueue:支持优先级…

php 复选框全选和取消,基于JavaScript实现复选框的全选和取消全选

这篇文章主要为大家详细介绍了基于JavaScript实现复选框的全选和取消全选,具有一定的参考价值,感兴趣的小伙伴们可以参考一下本文实例为大家分享了js复选框的全选和取消全选的具体代码,供大家参考,具体内容如下效果图:…

javascript date php date,JavaScript Date 知识浅析

Date函数new Date()Date 对象会自动把当前日期和时间保存为其初始值。date.getDate()从 Date 对象返回一个月中的某一天 (1 ~ 31)。date.getDay()从 Date 对象返回一周中的某一天 (0 ~ 6)。周日是0。date.getMonth()从 Date 对象返回月份 (0 ~ 11)。date.getFullYear()从 Date …

16字节 oracle md5,Oracle中的MD5加密

因为要用到MD5加密,所以在网上搜了一下相关资料,并进行仔细研究。其核心就是MD5编码的数据包函数:DBMS_OBFUSCATION_TOOLKIT.M因为要用到MD5加密,所以在网上搜了一下相关资料,并进行仔细研究。其核心就是MD5编码的数据…

link linux 跨设备,Linux中的两种link方式

Linux系统中包括两种链接方式:硬链接(hard link)和符号链接(symbolic link),其中符合链接就是所谓的软链接(soft link),那么两者之间到底有什么区别呢?inode在Linux系统中,内核为每一个新创建的文件分配一个inode&…

linux设置超链接,帮助-链接 - Linux Kernel Newbies

this page is outdated and needs to be fixed参考链接形式语法备注内部链接WikiNameCamelCase page name内部自由链接["Page"] or ["free link"]可配置函数内部子页面链接/SubPage or ["/Sub page"]相对于上一级页面外部链接http://example.net…

linux 文件系统cache,终于找到一篇详解Linux文件系统Cache的文章

级别: 初级2006 年 5 月 11 日文件 Cache 管理是 Linux 内核中一个很重要并且较难理解的组成部分。本文详细介绍了 Linux内核中文件 Cache 管理的各个方面,希望能够对开发者理解相关代码有所帮助。自从诞生以来,Linux 就被不断完善和普及&…

七桥问题c语言程序数据结构,数据结构与算法学习——图论

什么是图?在计算机程序设计中,图结构也是一种非常常见的数据结构但是图论其实是一个非常大的话题图结构是一种与树结构有些相似的数据结构图论是数学的一个分支,并且在数学概念上,树是图的一种它以图为研究对象,研究顶…

c语言式表白,c语言表白必备

c语言表白必备七夕情人节表白必备,多颜色心形展示看图#include#include#include#include #define r 10#define R 172int main(){int i;printf("我");fflush(stdout); //强制刷新缓存,输出显示Sleep(1000);printf("自");fflush(stdou…

android中gradle的作用,Gradle 之 Android 中的应用

在上一篇文章中 Gradle 之语言基础 Groovy 主要介绍了 Groovy 的基础语法(如果没有 Groovy 的基础,建议先看看上篇文章,如果可以动手敲一下里面的示例代码就更好不过了),也是为本篇文章打基础的。本篇文章主要介绍 Gradle 在 Android 中的应用…

自己写的android apk反编译,获取Android自己写好了的apk以及反编译

今天,我们先说一下,获取Android自带的apk以及反编译它们来学习Android工程师是怎样写的,今天我们就以拿到Android自带的短信管理器的apk为例子你可能有疑问,为什么要那么麻烦,从系统来拿,还要反编译&#x…

一加7pro系统更新android10,一加OnePlus7T Pro官方安卓10.0稳定版出厂系统固件升级更新包...

咱们的这个一加OnePlus7T Pro手机的最新稳定版系统包也是在这里来分享一下了,这个稳定版本的系统包是安卓10稳定版的,也是第一个版本的,系统包大小是3.2G,系统方面主要是全新的UI设计,轻快流畅操作体验,更多…

5元素升级android6,升级你的app以支持高长宽比的新旗舰

为了呈现更好的视觉效果,许多安卓OEM厂商都开始采用超大屏幕。三星刚刚发布了自己的新旗舰Samsung Galaxy S8,长宽比达到18.5:9。今年早些时候的全球移动大会上LG也亮相了 LG G6,屏幕长宽比达到了18:9。(左) maximum aspect ratio为16:9的app…

CCS太阳光准直系统使用积分球均匀光源

CCS太阳光准直系统的应用范围广泛,包括太阳光辐射测量、光学遥感仪器研制与标定、均匀光源的推广使用等方面。通过使用CCS太阳光准直系统,可以准确地模拟太阳光,并对各种光学仪器进行校准和标定,从而提高测量精度和稳定性。 CCS太…

js怎么制作html的主题,用HTML和CSS以及JS制作简单的网页菜单界面的代码

写ABROAD项目用到了标签这个东东,其实标签在WEB上到处可见,图中就依次显示了DCC文章发布器、ABROAD后台添加数据、百度图片搜索、sf发布博客文章时贴标签的样式——标签就像浏览器里原生的checkbox一样,不过checkbox实在太丑了,就…

哔哩网站登录界面html代码,仿哔哩哔哩网页模板设计

【实例简介】【实例截图】【核心代码】bilibili├── Home.html├── Login.html├── Register.html├── css│ ├── bootstrap.min.css│ └── css.css├── forget the password.html├── img│ ├── 001.png│ ├── 002.png│ ├── 003.png│ …

2021高考成绩查询大连,2021年大连高考各高中成绩及本科升学率数据排名及分析...

一、大连高考各高中成绩及本科升学率数据2020年辽宁省普通高等学校招生文化课录取控制分数线普通类 文史特殊类型招生控制分数线:567分本科控制分数线:472分专科(高职、提前专科)控制分数线:150分普通类 理工特殊类型招生控制分数线&#x…

编写了html怎么测试,如何将测试结果写入HTMLTestRunner生成的报告标题中

HTMLTestRunner生成测试报告时,报告的标题在运行前就已经写死在代码了,假如我现在需要在执行完毕后,根据执行结果,把执行的状态写在标题里面,类似的效果如图:标题如果有一条执行错误的,就在后面…