作用:解决当使用基类的指针指向派生类的对象并调用派生类中与基类同名的成员函数时会出错(只能访问到基类中的同名的成员函数)的问题,从而实现运行过程的多态

不加virtual

 #include<iostream>
#include<stdlib.h>
using namespace std; class Base {
private:
int mA;
int mB;
public:
Base(int a, int b)
{
mA = a;
mB = b;
}
void ShowMem()
{
cout << mA << " " << mB << endl;
}
}; class Derived:public Base {
private:
int mA;
int mB;
int mC;
public:
Derived(int a, int b, int c):Base(a,b)
{
mA = a;
mB = b;
mC = c;
}
void ShowMem()
{
cout << mA << " " << mB << " " << mC << endl;
}
}; void test(Base &temp)
{
temp.ShowMem();
} int main()
{
Base b(,);
b.ShowMem();
Derived d(, , );
d.ShowMem(); test(b);
test(d); system("PAUSE");
return ;
}

输出:

加virtual

#include<iostream>
#include<stdlib.h>
using namespace std; class Base {
private:
int mA;
int mB;
public:
Base(int a, int b)
{
mA = a;
mB = b;
}
virtual void ShowMem()
{
cout << mA << " " << mB << endl;
}
}; class Derived:public Base {
private:
int mA;
int mB;
int mC;
public:
Derived(int a, int b, int c):Base(a,b)
{
mA = a;
mB = b;
mC = c;
}
void ShowMem()
{
cout << mA << " " << mB << " " << mC << endl;
}
}; void test(Base &temp)
{
temp.ShowMem();
} int main()
{
Base b(1,2);
b.ShowMem();
Derived d(3, 4, 5);
d.ShowMem(); test(b);
test(d); system("PAUSE");
return 0;
}
输出:
 

使用方法:

virtual 返回类型 函数名(形参表)

  注意:只能出现在声明中

实现条件:
  • 类之间满足类的赋值兼容规则
  • 声明虚函数
  • 有成员函数来调用或者是通过指针,引用来访问同名函数

多态——virtual的更多相关文章

  1. C# 多态virtual标记重写 以及EF6 查询性能AsNoTracking

    首先你如果不用baivirtual重写的话,系统默认会为du你加new关键字,他zhi的作用是覆盖,而virtual的关键作用在dao于实现多态 virtual 代表在继承了这个类的子类里面可以使用o ...

  2. C++ 学习笔记 (七)继承与多态 virtual关键字的使用场景

    在上一篇 C++ 学习笔记 (六) 继承- 子类与父类有同名函数,变量 中说了当父类子类有同名函数时在外部调用时如果不加父类名则会默认调用子类的函数.C++有函数重写的功能需要添加virtual关键字 ...

  3. 数据库SQL 多态

    Sealed关键字:密封类 该类无法被继承 部分类: Namespace 命名空间 虚拟文件夹 Partial关键字 可以将一个类拆分成多个部分,分别放在多个文件里 多态: 1.编译多态 函数重载 2 ...

  4. C++学习22 多态的概念及前提条件

    在<C++基类和派生类的赋值>一节中讲到,基类的指针也可以指向派生类对象.请看下面的例子: #include <iostream> using namespace std; c ...

  5. C++三大特性之多态

    原文地址:https://qunxinghu.github.io/2016/09/08/C++%20%E4%B8%89%E5%A4%A7%E7%89%B9%E6%80%A7%E4%B9%8B%E5%A ...

  6. .NET Core CSharp初级篇 1-6 类的多态与继承

    .NET Core CSharp初级篇 1-6 本节内容为类的多态与继承 简介 终于讲到了面向对象三大特性中的两大特性--继承与多态.通过继承与多态,我们能很好的将类的拓展性发挥到了极致.在下面的内容 ...

  7. C#面向对象 (访问修饰符、封装、继承、多态)

    先看一下创建一个新项目时的基本格式 using System; using System.Collections.Generic; using System.Linq; //引用的命名空间 using ...

  8. C# 多态和接口

    1多态可以有属性,接口只有方法 2关键字不同,多态有静态多态(abstract)和动态多态(virtual),静态多态不能new()出自己,动态多态可以;多态中可以有自己的方法可设置不需要子类重写,接 ...

  9. C++程序结构---1

    C++ 基础教程Beta 版 原作:Juan Soulié 翻译:Jing Xu (aqua) 英文原版 本教程根据Juan Soulie的英文版C++教程翻译并改编. 本版为最新校对版,尚未定稿.如 ...

随机推荐

  1. MyBatis 插件之拦截器(Interceptor)

    参考 https://blog.csdn.net/weixin_39494923/article/details/91534658 //项目实际使用  就是在你进行数据库操作时,进行数据的第二次封装 ...

  2. <IDE>vscode前端常用插件推荐,搭建JQuery、Vue等开发环境

    vscode是微软开发的的一款代码编辑器,就如官网上说的一样,vscode重新定义(redefined)了代码编辑器.当前市面上常用的轻型代码编辑器主要是:sublime,notepad++,edit ...

  3. 为Viewgourp内组件添加动画

    package com.loaderman.customviewdemo; import android.animation.Keyframe; import android.animation.La ...

  4. PAT 甲级 1061 Dating (20 分)(位置也要相同,题目看不懂)

    1061 Dating (20 分)   Sherlock Holmes received a note with some strange strings: Let's date! 3485djDk ...

  5. java cpu 使用率100%

    --宝典开始 top :查看 进程 ,选CPU使用率高的 获取进程ID,pid top -Hp pid:查看线程,选CPU使用率高的 获取线程ID,threadid printf "%X\n ...

  6. easyui-datagrid配置宽度高度自适应

    在style属性中,去除之前添加的width和height属性(如果有的话),然后添加"fit:false"即可.

  7. 第十四章 SSL——《跟我学Shiro》

    目录贴:跟我学Shiro目录贴 对于SSL的支持,Shiro只是判断当前url是否需要SSL登录,如果需要自动重定向到https进行访问. 首先生成数字证书,生成证书到D:\localhost.key ...

  8. 异地协作,A地上传jar包到B地服务器上传速率慢

    在A地使用ftp服务器,再登录B地的目标服务器,使用ftp命令从ftp服务器下载文件,速度快点,下载带宽比上传带宽要大一点 https://blog.csdn.net/df0128/article/d ...

  9. 推特Twitter视频下载的2种方法

    Twitter上面的小视频越来越受欢迎了,其实,从社会发展的角度看,短视频的流行是一种必然的趋势.首先,智能手机和高速网络的普及,让人们的碎片化时间得以利用.坐地铁.吃饭的时间,点开一个视频段子.学一 ...

  10. ELK7.4.2安装教程

    ELK简介 "ELK"是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch.Logstash 和 Kibana.Elasticsearch 是一个搜索和分析引擎 ...