c++学习笔记之继承篇

一 继承方式

  • public
  • protected
  • private

二 多继承和多重继承

举个例子就明白了

多继承 :农民工就算是多继承。

graph TD;
    人类-->农民;
    人类-->工人;
    农民-->农民工;
    工人-->农民工;

多重继承 :小学生属于多重继承

graph TD;
    人-->学生;
    学生-->小学生;

三 虚继承和虚函数

虚继承是多重继承中特有的概念,是为解决多重继承的。用虚继承可以节省内存空间

如上图示例,类D同时继承B,C,而B,C又同时继承A,很显然在声明D时,会两次初始化类A,这样不仅重复定义了类A,而且浪费空间,因此在定义B,C两个类的时候就需要虚继承类A,代码示例如下

class A{};
class B:vitual public A
{};
class C:vitual public A
{};
class D: public B, public C
{};

在这里插播一条”广告“,即如何巧妙的避免头文件被重复include的解决办法: 使用重定义即可 为什么使用重定义?

一个东西在同一个作用域里被定义(声明)了两次或以上,编译器不知道该采用哪一个声明。多发生在头文件被重复include的时候。在c语言中可以采用如下代码可以防止头文件重复包括,头文件被include了第一次,第二次就include就被无视跳过

#ifndef _person
#define _person
#include "person.h"
...
...
#endif

虚函数是面向对象多态性的主要方式,通过继承基类中的虚函数在子类中重载实现不同操做。继承的虚函数在子类中不需要加virtual,默认就是虚函数。可以被它的子类覆盖。

注意:virtual在函数中的使用限制

  • 不能修饰普通函数
  • 不能修饰类静态成员函数(static)
  • 不能修饰内联函数(inline)
  • 不能修饰构造函数

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏pangguoming

java正则校验,密码必须由字母和数字组成

一个匹配数字和字母密码的正则表达式 2011 年 12 月 14 日 | Filed under: 正则表达式 and tagged with: 密码 , ...

66360
来自专栏Vamei实验室

Python深入01 特殊方法与多范式

Python一切皆对象,但同时,Python还是一个多范式语言(multi-paradigm),你不仅可以使用面向对象的方式来编写程序,还可以用面向过程的方式来...

21950
来自专栏Micro_awake web

es6(二):解构赋值

ES中允许按照一定格式从数组,对象值提取值,对变量进行赋值,这就是解构(Destructuring) 1 let [a,b,c]=[1,10,100] 2 ...

20950
来自专栏marsggbo

c++学习笔记之继承篇

一 继承方式 public ? protected ? private ? 二 多继承和多重继承 举个例子就明白了 多继承 :农民工就算是多继承。 graph...

24250
来自专栏章鱼的慢慢技术路

追踪状态——消息解码问题的思路剖析

18030
来自专栏平凡文摘

7大经典的排序算法总结实现

14620
来自专栏数据科学与人工智能

【Python环境】Python函数式编程指南(2):函数

2. 从函数开始 2.1. 定义一个函数 如下定义了一个求和函数: def add(x, y): return x + y 关于参数和返回值的语法细节可以参考...

22150
来自专栏Python攻城狮

Python-random模块

7.从列表a中以随机顺序取出3个元素(一个元素只能取出一次,所以取出的个数不能大于列表所含元素的个数)

9820
来自专栏C/C++基础

多字节与宽字符串的相互转换

说到多字节字符串与宽字符串,不得不说一下多字节字符与宽字符。多字节字符实际上是由多个字节来表示一个字符,在各个国家和地区采用不同的编码方案,不同编码方案字符码值...

17420
来自专栏IT可乐

Java数据结构和算法(十三)——哈希表

  Hash表也称散列表,也有直接译作哈希表,Hash表是一种根据关键字值(key - value)而直接进行访问的数据结构。它基于数组,通过把关键字映射到数组...

31080

扫码关注云+社区

领取腾讯云代金券