C++继承-重载-多态-虚函数】的更多相关文章

C++ 继承 基类 & 派生类 一个类可以派生自多个类,这意味着,它可以从多个基类继承数据和函数.定义一个派生类,我们使用一个类派生列表来指定基类.类派生列表以一个或多个基类命名,形式如下: // 派生类 class Rectangle: public Shape { public: int getArea() { return (width * height); } }; 多继承 多继承即一个子类可以有多个父类,它继承了多个父类的特性. C++ 类可以从多个类继承成员,语法如下: class…
目录 一.作用域与名字查找 1.作用域的嵌套 2.在编译时进行名字查找 3.名字冲突与继承 4.通过作用域运算符来使用隐藏的成员 二.同名函数隐藏与虚函数覆盖 1.几种必须区分的情况 2.一个更复杂的例子 类的关系图: 一.作用域与名字查找 1.作用域的嵌套 派生类的作用域嵌套在基类之内 Bulk_quote bulk; cout<< bulk.isbn(); 名字isbn解析过程: 因为我们是通过Bulk_quote的对象调用isbn的,所以首先在Bulk_quote中查找,这一步没有找到名…
运算符重载与虚函数 单目运算符 接下来都以AClass作为一个类例子介绍 AClass{ int var } 区分后置++与前置++ AClass operator ++ () ++前置 一般设计为返回引用 这样的话可以将其作为左值(自然也可以作为右值,会调用该类的拷贝构造函数) ++class = ... AClass operator ++ (int) 后置++ 一般设计返回一个旧的类 获得的是历史版本,所含有的int形参是用作区分类型的,并无实际含义 由于一个__单变量__的构造函数可被视…
一.多态: 1.多态是什么:具有不同功能的函数可以用同一个函数名 2.静态多态:程序编译时决定,通过函数重载实现. 3.动态多态:程序运行时决定,通过虚函数实现. 二.虚函数: 1.引入目的:可以通过基类指针或引用来访问基类和派生类中的同名函数(简化多态函数的调用). 方法:先用基类指针指向该对象即可. 2.重载与虚函数: 重载处理的是同一层次上的同名函数问题(横向重载); 而虚函数处理的是不同派生层次上的同名函数问题(可理解为纵向重载)(多态) 3.虚析构函数: 建议使用虚析构函数,以保证在撤…
  c++继承中的虚函数 c++是一种面向对象的编程语言的一个很明显的体现就是对继承机制的支持,c++中继承分很多种,按不同的分类有不同分类方法,比如可以按照基类的个数分为多继承和单继承,可以按照访问权限分为public继承.protected继承和private继承,按照是否是虚拟继承可以分为virtual继承和non-virtual继承.当然这里的分类标准都是有重叠的部分,比如,non-virtual继承又可以分为单继承和多继承.这里要讨论的是虚函数,因此主要从virtual和non-vir…
目录 1.虚函数列表的位置 2.虚函数列表的内容 3.链式继承中虚函数列表的内容   注: 虚函数列表 又称为虚表, vtbl , 指向它的指针称为vptr, vs2019中称为__vfptr 操作系统: windows 10 专业版 64位 编译器: Visual Studio 2019 Community   1.虚函数列表的位置 结论 编译器一般会保证指向虚函数列表的指针存在于对象实例中最前面的位置 而虚函数列表中的内容, 就是多个函数指针 代码验证: 首先声明一个基类Base和一个派生类…
继承是一种耦合度很强的关系 和父类代码很多都重复的 2 继承的概念 3 继承的概念和推演 语法: class 派生类:访问修饰符 基类 代码: … … 4 继承方式与访问控制权限 相对的说法: 爹派生 儿子继承 子类虽然看起来是在父类的基础上增加了一些东西 但实际上子类和父类是完全独立的两个东西 5 继承方式的练习 … … … 6 继承类的兼容性原则 子类空间比父类空间大 7 利用兼容性原则的传参方式 声明一个父类的指针 子类都可以使用 声明一个父类的指针 子类都可以使用 8 继承中的构造析构顺…
在介绍多态之前,先回忆:赋值兼容原则.虚基类.二义性.派生类如何给基类赋值等知识. 在赋值兼容原则中:父类对象的指针赋给基类的指针或者父类的对象赋给基类的引用,可以通过强转基类的指针或者引用变为父类的对象. 1 如果不强转访问函数或者数据时只能访问基类本身的,但是此时基类本身数据或者函数中的值应该是父类给赋予的.总之一句话:在没有虚函数时指针或者引用的向上转型,编译看左边,访问也看左边——这叫重载函数之间的关系.(书中P201的例子) 2 当基类中的函数是虚函数时,只要声明了基类指针,就可以用它…
 (1).对象类型:           a.静态类型:对象声明时的类型,编译的时候确定           b.动态类型:对象的类型是运行时才能确定的 class A {}; class B:public A {}; int main() { B* b; A* a=b;//a的静态类型是A*,动态类型(运行时)类型是B* ; } (2).多态           a.静态多态:函数重载.泛性编程    int Add(int a,int b) { return a+b; } float Add…
#include <iostream> using namespace std ; class Father { private :  virtual void Say()  //只有添加了virtual 关键字声明才会产生虚函数表 虚函数表在编译的时候确定  virtual是实现多态的关键  {    cout<<"Father::Say()"<<endl ;  }  virtual void Run()  {   cout<<&quo…