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. 为什么要用 Spring Boot?

    Spring Boot 优点非常多,如:独立运行简化配置自动配置无代码生成和XML配置应用监控上手容易Spring Boot 集这么多优点于一身,还有理由不使用它呢?

  2. Java中如何强制类型转换

    例如,当程序中需要将 double 型变量的值赋给一个 int 型变量,该如何实现呢? 显然,这种转换是不会自动进行的!因为 int 型的存储范围比 double 型的小.此时就需要通过强制类型转换来 ...

  3. Mybatis入门程序(一)

    1.入门程序实现需求 根据用户id查询一个用户信息 根据用户名称模糊查询用户信息列表 添加用户(二) 更新用户(二) 删除用户(二) 2.引入Mybatis所需 jar 包(Maven工程) < ...

  4. 007.iSCSI服务器CHAP双向认证配置

    一 iSCSI和CHAP介绍 1.1 iSCSI 磁盘 iSCSI后端存储支持多种设备类型,主要有: 文件 单一分区(partition) 磁盘 数组 RAID LVM 本手册建议以裸磁盘vdb作为示 ...

  5. CSDN博客步骤:

    在SCDN看到喜欢的文章想转载又嫌一个一个敲太麻烦,干脆直接收藏.但有时候作者把原文章删除或设置为私密文章后又看不了.所以还是转载来的好.这篇博文为快速转载博客的方法,亲测有效,教程如下. 原博客原址 ...

  6. 用jq实现移动端滑动轮播以及定时轮播效果

    Html的代码: <div class="carousel_img"> <div class="car_img" style="ba ...

  7. mpvue打包没有app.json等配置文件的解决方法

    问题 一早上折腾了1个小时,小程序始终提示查找不到'app.json'文件.mpvue重新打包,光生成内容文件无配置文件. 解决办法 出错原因:版本问题 只需要把packpage.json里的mpvu ...

  8. throws子句在继承当中overrride时有什么规则

    8.throws子句在继承当中overrride时的规则 马克-to-win:当子类方法override父类方法时,throws子句不能引进新的checked异常.换句话说:子类override方法的 ...

  9. Native方法的使用

    Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能. 可以将 ...

  10. Smith数的判断

    题目描述: smith数是指满足下列条件的可分解的整数: 其所有位数上的数字和等于其全部素数因子的数字之和. 例如,9975是smith数,9975=3*5*5*7*19,即9975的数字和=因子的数 ...