C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
1.虚函数(impure virtual)
C++的虚函数主要作用是“运行时多态”,父类中提供虚函数的实现,为子类提供默认的函数实现。
子类可以重写父类的虚函数实现子类的特殊化。
如下就是一个父类中的虚函数:
class A { public:virtual void out2(string s){cout<<"A(out2):"<<s<<endl;} };
2.纯虚函数(pure virtual)
C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。
C++中的纯虚函数更像是“只提供申明,没有实现”,是对子类的约束,是“接口继承”。
C++中的纯虚函数也是一种“运行时多态”。
如下面的类包含纯虚函数,就是“抽象类”:
class A { public:virtual void out1(string s)=0;virtual void out2(string s){cout<<"A(out2):"<<s<<endl;} };
3.普通函数(no-virtual)
普通函数是静态编译的,没有运行时多态,只会根据指针或引用的“字面值”类对象,调用自己的普通函数。
普通函数是父类为子类提供的“强制实现”。
因此,在继承关系中,子类不应该重写父类的普通函数,因为函数的调用至于类对象的字面值有关。
4.程序综合实例
#include <iostream> using namespace std;class A { public:virtual void out1()=0; ///由子类实现virtual ~A(){};virtual void out2() ///默认实现 {cout<<"A(out2)"<<endl;}void out3() ///强制实现 {cout<<"A(out3)"<<endl;} };class B:public A { public:virtual ~B(){};void out1(){cout<<"B(out1)"<<endl;}void out2(){cout<<"B(out2)"<<endl;}void out3(){cout<<"B(out3)"<<endl;} };int main() {A *ab=new B;ab->out1();ab->out2();ab->out3();cout<<"************************"<<endl;B *bb=new B;bb->out1();bb->out2();bb->out3();delete ab;delete bb;return 0; }
执行结果:
C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别相关推荐
- 【C++ 语言】面向对象 ( 继承 | 重写 | 子类调用父类方法 | 静态多态 | 动态多态 | 虚函数 | 纯虚函数 )
文章目录 类的继承 方法的重写 子类中调用父类方法 多态 虚函数 虚函数示例 纯虚函数 相关代码 类的继承 1. 继承表示 : C++ 中继承可以使用 ":" 符号 , 格式为 & ...
- 面试中常被问到(11)虚函数/纯虚函数
虚函数 如何定义一个虚函数?在基类成员函数前加入virtual关键字,但并不代表此函数不被实现,只是说明允许基类指针调用派生类重写的此函数 一个类只要声明有虚函数或者从基类继承了虚函数,在编译过程中就 ...
- C++对象内存布局--③测试多继承中派生类的虚函数在哪一张虚函数表中
C++对象内存布局--③测试多继承中派生类的虚函数在哪一张虚函数表中 测试2:证明派生类的虚函数的地址跟第一基类的虚函数地址保存在同一张虚函数表中. 派生类有多少个拥有虚函数的基类,派生类对象就有多少 ...
- C++ 虚函数 纯虚函数 抽象类 代码示例
其中抽象类指的是在类的定义中出现了纯虚函数,导致无法实例化,. 代码:头文件 #include "stdafx.h"using namespace std;class Person ...
- C++: 虚函数 / 纯虚函数
虚函数 ● 虚函数是指在基类内部声明的成员函数前添加关键字 virtual 指明的函数 ● 虚函数存在的意义是为了实现多态,让派生类能够重写(override)其基类的成员函数 ● 派生类重写基类的虚 ...
- 什么是纯虚函数 纯虚函数的作用 如何定义使用纯虚函数
什么是纯虚函数 纯虚函数的作用 如何定义使用纯虚函数 一 定义: 纯虚函数是一种特殊的虚函数,它的一般格式如下: class <类名> { virtual <类型>& ...
- C++:多态与虚函数,纯虚函数
1.多态的机制与虚函数的机制 1.1 多态的机制 1.当在类中使用virtual声明一个函数为虚函数时,在编译时,编译器会自动在基类中默默地安插一个虚函数表指针,同时的.rodata段为这类生成一张虚 ...
- 虚函数 纯虚函数 虚基类说明
原文:http://www.cnblogs.com/ms-frank/archive/2008/01/16/1041310.html 虚基类 在说明其作用前先看一段代码 [cpp] view plai ...
- 38.【C++ 虚函数 纯虚函数 虚基类 (最全详解)】
虚函数.虚基类.纯虚函数 (一).虚函数 1.什么是虚函数: 2.虚函数的格式: 3.关于虚函数的注意事项: 4.虚函数的作用: 5.虚函数访问格式 6.虚函数的各种疑难杂症 [当指针是基类.但虚函数 ...
- C++多态虚函数/纯虚函数demo
#include <iostream> using namespace std;class A //A是一个抽象类,不能new A直接实例化. { public:virtual void ...
最新文章
- 经济独立,是你最大的底气
- 根据PI/4 = 1 - 1/3 +1/5-1/7+1/9求圆周率
- SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession作用域(Scope)和生命周期
- oracle产品追溯,如何追溯AR到Receipt再到GL
- celery无密码连接redis与带密码连接redis
- checkStyle -- 代码风格一致
- windows下面虚拟主机
- 记最近分析的一个锁屏幕病毒
- 30 分钟带你学透快应用界面开发的最正确姿势
- 流放者柯南rust_《流放者柯南》玩法前瞻 奴隶助你生活奔小康
- 配置IIS5.5/6.0 支持 Silverlight
- 甩一个Microsoft office visio 2013的百度云连接
- 探索大神科比,30000多次投篮数据,有好玩的发现
- 摘要:HenCoder Android 自定义 View 1-7:属性动画 Property Animation(进阶篇)
- 《剑指offer》阅读体会
- 不是抽象的, 并且未覆盖Handler中的抽象方法
- 华为云照片的爬虫程序更新(python3.6)
- 真实收益DeFi崛起 这些DeFi协议已采用它
- 【易通慧谷】科技赋能金融,三新理念全面解读新金融
- 建立枚举类型Weekday,假设今日为星期二,计算10天后为星期几。