C++基础-6-继承
6. 继承
1 #include<iostream>
2 using namespace std;
3
4
5 class Base {
6 public:
7 Base() {
8 m_A = 10;
9 }
10 int m_A;
11
12 };
13
14 class Son: public Base {
15 public:
16 Son() {
17 m_A = 20;
18 }
19 int m_A;
20 };
21
22 // 对于静态成员
23 class Base1 {
24 public:
25
26 static int m_A;
27
28 };
29
30 int Base1::m_A = 10;
31
32 class Son1 : public Base1 {
33 public:
34
35 static int m_A;
36 };
37 int Son1::m_A = 20;
38
39 void test01() {
40 // 1.通过对象访问
41 Base b1;
42 Son s1;
43 cout << "通过对象访问" << endl;
44 cout << "Base ---> m_A:" << b1.m_A << endl;
45 cout << "Son ---> m_A:" << s1.Son::m_A << endl;
46
47
48 // 2.通过类名访问(对于静态成员)
49 cout << "通过类名访问" << endl;
50 cout << "Base1 ---> m_A:" << Base1::m_A << endl;
51 cout << "Son1 ---> m_A:" << Son1::Base1::m_A << endl;
52 }
53
54 int main() {
55
56 test01();
57
58 system("pause");
59
60 return 0;
61 }
62
63 // 总结(继承)
64 // 继承---目的是减少重复代码,提高代码的复用率
65 //
66 // 继承语法:class 子类: 继承方式 父类
67 // 继承方式:公共继承(public),保护继承(protected),私有继承(private)
68 //
69 // 父类中所有的非静态成员属性都会被子类继承下去
70 // 父类中私有成员属性 是被编译器隐藏了,因此访问不到,但是会被继承下去
71 //
72 // cl /d1 reportSingleClassLayout(xxx类名) xxx.cpp
73 // 第一个是L,第二个是123的1,报告单各类的布局
74 //
75 // 继承中构造和析构的顺序:
76 // 先构造 父类,再构造 子类; 析构顺序与构造顺序相反;
77 //
78 // 继承同名成员(变量/函数)的处理方式:
79 // 当子类与父类出现同名成员,
80 // 访问子类同名成员 直接访问即可 s.m_A
81 // 访问父类同名成员 需要加作用域 s.Base::m_A
82 //
83 // 此外,对于静态成员,处理方式与非静态成员相同
84 //
85 // 菱形继承
86 // 两个派生类继承同一个基类
87 // 又有某个类同时继承两个派生类
88 // 这样的继承成为菱形继承,或者钻石继承
89 //
90 // 存在问题:
91 // 产生二义性(加作用域解决)
92 // 重复继承,只需要一份继承即可
93 // 利用虚继承解决,关键字virtual
94 //
参考:《黑马程序员》C++教程
C++基础-6-继承的更多相关文章
- 二十二. Python基础(22)--继承
二十二. Python基础(22)--继承 ● 知识框架 ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A: def get(s ...
- 第二十八节:Java基础-进阶继承,抽象类,接口
前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...
- Java基础学习-- 继承 的简单总结
代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...
- 三、Java基础---------关于继承、构造函数、静态代码块执行顺序示例讲解
在上节博客中曾提到过类的继承,这篇文章主要是介绍类的继承.构造函数以及静态代码块的执行顺序. 首先接着分析在黑马基础测试中的一个关于继承的题目,题目描述如下: 声明类Person,包含2个成员变量:n ...
- JAVA与多线程开发(线程基础、继承Thread类来定义自己的线程、实现Runnable接口来解决单继承局限性、控制多线程程并发)
实现线程并发有两种方式:1)继承Thread类:2)实现Runnable接口. 线程基础 1)程序.进程.线程:并行.并发. 2)线程生命周期:创建状态(new一个线程对象).就绪状态(调用该对象的s ...
- 【Java基础】继承的一些总结
什么是继承 把一些类的具有共性的东西剥离出来形成一个新的类,然后各个其他类保留自己独有的特性,并用关键字extends继承这个剥离出来的新的类,可以最终达到各类原始相同效果,但是在每个类中,单用一个“ ...
- Java基础08 继承
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 继承(inheritance)是面向对象的重要概念.继承是除组合(composit ...
- C++基础——类继承中方法重载
一.前言 在上一篇C++基础博文中讨论了C++最基本的代码重用特性——类继承,派生类可以在继承基类元素的同时,添加新的成员和方法.但是没有考虑一种情况:派生类继承下来的方法的实现细节并不一定适合派生类 ...
- Python基础之继承与派生
一.什么是继承: 继承是一种创建新的类的方式,新建的类可以继承一个或过个父类,原始类成为基类或超类,新建的类则称为派生类 或子类. 其中,继承又分为:单继承和多继承. class parent_cla ...
- Python设计模式 - 基础 - 封装 & 继承 & 多态
面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...
随机推荐
- 请简述下你在哪些场景下会选择 Kafka?
日志收集:一个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer,例如hadoop.HBase.Solr等. 消息系统:解耦和生产者和消费者.缓 ...
- springmvc对参数接收的两个注解@RequestParam和@RequestBody
@RequestParam 作用:将请求参数绑定到控制器的方法参数上,主要用于接收几班类型参数 语法:@RequestParam(value="参数名",required=&quo ...
- 学习Docker(二)
一.Docker快速入门 Docker 改变了什么? 1.简化配置 2.流水线管理 3.应用隔离 4.提高开发效率 5.快速部署 6.面向产品:产品交付 7.面向开发:简化环境配置 8.面向测试:多版 ...
- Spark学习摘记 —— Pair RDD转化操作API归纳
本文参考 参考<Spark快速大数据分析>动物书中的第四章"键值对操作",由于pair RDD的一些特殊操作,没有和前面两篇的API归纳放在一起做示例 前面的几个api ...
- SDT v0.0.1 上线
自己的第一个开源组件,断断续续写了有一段时间,感觉可以发布 v0.0.1.SDT 是 SVG Drag Tree 的缩写,一个可以通过拖放 SVG 图标,来生成拥有树形结构的视图与相应数据的前端组件. ...
- 使用Egret插件压缩代码包体积,减少请求数量的实战教程
在白鹭引擎发布了5.2.7版本中新增加了命令行,增加自动合图插件TextureMergerPlugin功能.今天,我们以一个EUI案例来展示自动合图插件的具体使用方法和注意事项. 此外,我们在本文还融 ...
- spark-shell报错java.lang.IllegalArgumentException: java.net.UnknownHostException: namenode
在使用spark on yarn启动spark-shell时,发现报错: 是说找不到主机名为namenode的主机,那么应该是配置文件出错了. 经过检查,发现是spark-defaults.conf文 ...
- Python入门-初识变量类型
上一篇我们学习了第一行代码,我们print()了很多代码,我们可以print哪些东西呢,这一篇来讲. print()括号里面可以放哪些东西呢?..可以放很多东西,只要是Python的全部数据类型都可以 ...
- springboot+mybatis实现数据分页(三种方式)
项目准备 1.创建用户表 2.使用spring初始化向导快速创建项目,勾选mybatis,web,jdbc,driver 添加lombok插件 <?xml version="1.0&q ...
- /application/zabbix/sbin/zabbix_server: error while loading shared libraries: libmysqlclient.so.20: cannot open shared object file: No such file or directory
在启动/usr/local/zabbix/sbin/zabbix_server 时报错如下 此时需要配置一个软连接指向该位置. ln -s /usr/local/mysql/lib/libmysqlc ...