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-继承的更多相关文章

  1. 二十二. Python基础(22)--继承

    二十二. Python基础(22)--继承 ● 知识框架   ● 继承关系中self的指向 当一个对象调用一个方法时,这个方法的self形参会指向这个对象 class A:     def get(s ...

  2. 第二十八节:Java基础-进阶继承,抽象类,接口

    前言 Java基础-进阶继承,抽象类,接口 进阶继承 class Stu { int age = 1; } class Stuo extends Stu { int agee = 2; } class ...

  3. Java基础学习-- 继承 的简单总结

    代码参考:Java基础学习小记--多态 为什么要引入继承? 还是做一个媒体库,里面可以放CD,可以放DVD.如果把CD和DVD做成两个没有联系的类的话,那么在管理这个媒体库的时候,要单独做一个添加CD ...

  4. 三、Java基础---------关于继承、构造函数、静态代码块执行顺序示例讲解

    在上节博客中曾提到过类的继承,这篇文章主要是介绍类的继承.构造函数以及静态代码块的执行顺序. 首先接着分析在黑马基础测试中的一个关于继承的题目,题目描述如下: 声明类Person,包含2个成员变量:n ...

  5. JAVA与多线程开发(线程基础、继承Thread类来定义自己的线程、实现Runnable接口来解决单继承局限性、控制多线程程并发)

    实现线程并发有两种方式:1)继承Thread类:2)实现Runnable接口. 线程基础 1)程序.进程.线程:并行.并发. 2)线程生命周期:创建状态(new一个线程对象).就绪状态(调用该对象的s ...

  6. 【Java基础】继承的一些总结

    什么是继承 把一些类的具有共性的东西剥离出来形成一个新的类,然后各个其他类保留自己独有的特性,并用关键字extends继承这个剥离出来的新的类,可以最终达到各类原始相同效果,但是在每个类中,单用一个“ ...

  7. Java基础08 继承

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 继承(inheritance)是面向对象的重要概念.继承是除组合(composit ...

  8. C++基础——类继承中方法重载

    一.前言 在上一篇C++基础博文中讨论了C++最基本的代码重用特性——类继承,派生类可以在继承基类元素的同时,添加新的成员和方法.但是没有考虑一种情况:派生类继承下来的方法的实现细节并不一定适合派生类 ...

  9. Python基础之继承与派生

    一.什么是继承: 继承是一种创建新的类的方式,新建的类可以继承一个或过个父类,原始类成为基类或超类,新建的类则称为派生类 或子类. 其中,继承又分为:单继承和多继承. class parent_cla ...

  10. Python设计模式 - 基础 - 封装 & 继承 & 多态

    面向对象的核心是对象,世间万物都可以看作对象,任何一个对象都可以通过一系列属性和行为来描述,可以包含任意数量和类型的数据或操作.类是用来描述具有相同属性和方法的所有对象的集合.类通常是抽象化的概念,而 ...

随机推荐

  1. Effective Java —— 覆盖equals时遵守通用约定

    本文参考 本篇文章参考自<Effective Java>第三版第十条"Obey the general contract when overriding equals" ...

  2. js技术之根据name获取input的值

    一.前端的代码 <p>Name: <input type='text', name = 'name'/></p> <p>Age: <input t ...

  3. python学习笔记(六)——程序调试

    在我们平时编写程序时,常常会遇到各种错误,俗称BUG.而我们程序猿的工作常常需要对程序进行调试,也就是所谓的debug. 程序调试是将编制的程序投入实际运行前,用手工或编译程序等方法进行测试,修正语法 ...

  4. 【C语言】预处理、宏定义、内联函数

    一.由源码到可执行程序的过程 1. 预处理: 源码经过预处理器的预处理变成预处理过的.i中间文件 1 gcc -E test.c -o test.i 2. 编译: 中间文件经过编译器编译形成.s的汇编 ...

  5. web音频流转发之AudioNode

    前言 上一章地址: web音频流转发之音频源下一张地址:web音频流转发之音视频直播在这一章我说几个我们需要用到的音频处理模块也就3个吧,包括我们转发流是需要用到的核心模块.更多模块请看MDN,或者看 ...

  6. java集合(arraylist详解)

    一.ArrayList概述 ArrayList是实现List接口的动态数组,所谓动态就是它的大小是可变的.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类 ...

  7. Python知识结构

    Python知识结构(点我) 欢迎评论提修改意见

  8. OllyDbg---比较、条件跳转指令

    比较和条件跳转 CMP 比较两个操作数,相当于SUB指令,但是相减的结果不保存到第一个操作数,而是根据相减的结果来改变零标志位.当两个操作数相等时,零标志位Z置为1. 两个操作数不相等时,零标志位Z被 ...

  9. spring-基于xml的aop开发-快速入门

    1.导入aop的相关坐标 <dependency> <groupId>org.springframework</groupId> <artifactId> ...

  10. Linux下编写和加载 .ko 文件(编写linux驱动)

    一..ko 文件介绍 .ko文件是kernel object文件(内核模块),该文件的意义就是把内核的一些功能移动到内核外边, 需要的时候插入内核,不需要时卸载. 二.优点 (1)这样可以缩小内核体积 ...