C++之继承探究(一):继承的概念
前文:《Essential C++》笔记之漫游:面向对象编程思维
继承
(1)一个类A可以继承另一个类B,那么我们称类B为基类(父类),类A为派生类(子类)。
(2)子类从父类继承了所有成员,除了构造函数、析构函数、赋值运算符重载函数;
(3)子类继承父类后,子类的成员分为两部分:
1、继承自父类的部分(base part);
2、子类自己扩展的成员(appendent part);
(4)虽然父类的私有成员被子类继承,但子类依然不能直接访问这些私有成员,子类只能通过继承自父类的公有的成员函数来访问;
(5)子类可以自己实现与父类成员函数原型相同(函数名,参数列表)的成员函数,称为覆盖或重写(overwrite)。
(6)当通过父类对象调用被覆盖的函数时,父类版本的函数被调用,当通过子类对象调用覆盖父类的函数时,子类版本的函数被调用。
(7)子类可以调用被覆盖的父类版本的函数,使用子类对象名.父类名::函数名,如 s.Father::print( );
例1-1:
例1-2:
例1-3:
例2 (本例在前文也出现过:C++之初始化列表(Initialization List)探究):
注:只有两个地方我们会在一个类的构造函数中调用另一个类的构造函数:复合类和继承
附例2代码:
//小问学编程
#include<iostream>
using namespace std;class Base
{public:Base(int i):b_number(i){}int get_number(){return b_number;}void print(){cout<<b_number<<endl;}
private:int b_number;
};class Derived:public Base
{public:
//子类中有两个成员变量:
//一个自己的,一个继承的,两个都要初始化Derived(int i,int j):Base(i),d_number(j){}void print(){//子类只能通过继承自父类的的公有成
//员函数来访问继承自自父类的私有成员cout<<get_number()<<" ";cout<<d_number<<endl;}
private:int d_number;
};int main()
{Base a(2);Derived b(3,4);a.print();//print()in Basecout<<"b is ";b.print();//print()in Derivedcout<<"base part of b is ";b.Base::print();return 0;
}
运行结果:
C++之继承探究(二):protected成员
C++之继承探究(一):继承的概念相关推荐
- C++之继承探究(九):多态的代价
前文:C++之继承探究(八):动态绑定 多态: 用父类指针or引用,统一操作各种子类对象(也包括父类对象)(父类的指针或引用有多种形态). 为了实现动态绑定,编译器会为每一个包含虚函数的类 ...
- C++之继承探究(二):protected成员
前文:C++之继承探究(一):继承的概念 protected成员 在下面右例中,子类虽然继承了父类的私有成员b_number,但是在子类的print()函数中依然不能直接访问该私有成员,子类只能通 ...
- C++中的继承与虚函数各种概念
虚继承与一般继承 虚继承和一般的继承不同,一般的继承,在目前大多数的C++编译器实现的对象模型中,派生类对象会直接包含基类对象的字段.而虚继承的情况,派生类对象不会直接包含基类对象的字段,而是通过一个 ...
- C++之继承探究(十二):子类的构造、析构和赋值运算符重载
涉及到本文所讲知识点的博文: C++之析构函数探究 C++之常引用和浅拷贝探究 C++之一个函数链的简单例子(分文件实现) C++之Big Three:拷贝构造.拷贝赋值.析构函数探究 C++之操作符 ...
- C++之继承探究(十一):多重继承、菱形继承、虚继承、二义性问题及其解决方案
前文:C++之继承探究(十):抽象基类与纯虚函数 多重继承: 例1:两个父类中的同名函数如何区分示例 解决方法:在子类对象调用print( )函数时加上某个父类的作用域符号. 附上例代码: //小问学 ...
- C++之继承探究(十):抽象基类与纯虚函数
前文:C++之继承探究(九):多态的代价 抽象基类与纯虚函数 ♠\spadesuit♠ 纯虚函数:虚函数只有声明,函数体=0,就是一个纯虚函数,纯虚函数没有函数体,不需要实现.在子类里实现纯虚函数 ...
- C++之继承探究(八):动态绑定
前文:C++之继承探究(七):虚析构函数 动态绑定 虚函数被调用的时候,到底调用那个版本,在编译的时候无法确定,只有在执行时才能确定,称为动态绑定.之前的函数调用,是在编译时就可以确定调用哪个版本 ...
- C++之继承探究(七):虚析构函数
前文:C++之继承探究(六):虚函数和多态 虚析构函数 虚析构函数是为了解决基类的指针指向派生类对象,并用基类的指针删除派生类对象时防止子类的数据不会被释放造成内存泄露. 如果父类的析构不是虚 ...
- C++之继承探究(六):虚函数和多态
前文:C++之继承探究(五):子类对象作父类对象使用 虚函数的使用 当父类指针或引用指向子类对象,而子类中又覆盖了父类的函数,希望用父类指针或父类引用,调用到正确版本的函数(父类指针或引用实际所指 ...
最新文章
- mysql 新增 删除用户和权限分配
- scala recursive value x$5 needs type
- 自己做的几个小软件(数学工具和游戏),用C/C#制作,用到许多相关的C#技术细节,可以免费提供下载,感兴趣的,来看一下...
- python3.6.0怎么安装pip_python3.6环境安装+pip环境配置教程图文详解
- 图解Win7下安装Borland C++ 3.1失败记
- VisualStudio代码样式-我最喜欢的一种风格
- [itint5]棋盘漫步
- Builder(生成器)--对象创建型模式
- iPhone XR 2再曝新配色:清新自然 是原谅的味道?
- mysql连表的sql语句_sql语句之连表操作
- vue框架的vue-router路由的运用
- wordpress安装后勿忘删除install.php
- 我的小导师-天津大学张梅山老师要招NLP方向的研究生啦!
- android4.0 禁止横竖屏切换使用 android:configChanges=orientation|keyboardHidden无效
- 190521每日一句
- 回归 ----一元线性回归
- 总结一下常用web.config公共配置。
- win10如何打开计算机窗口,处理win10中电脑任务栏不显示打开窗口的方法
- Altuim Designer PCB设计
- Python中随机数种子的作用及使用
热门文章
- windows系统下maven环境搭建
- AndroidUtilCode框架 fileutils学习总结
- android多个activity共用一个菜单,Android开发之多个Activity跳转(Intent)及菜单用法(menu)...
- 通过浏览器启动php cli,Cron作业PHP脚本失败但脚本将通过CLI或浏览器运行
- 一种牛逼的网站分享插件实现
- jQuery全局Ajax事件处理器
- java之插入排序算法
- 显卡风扇不转电脑黑屏_笔记本电脑开不了机是什么原因及常见解决办法
- Python查找包含指定字符串的所有Office文档
- java的scanner使用步骤