学习C++必定会遇到重载、重写、重定义。概念的东西多也是学习C++蛋疼之处,但是还是得弄懂,学懂了也就不觉得多了。

  

  概念,特点:

  

  重载:

    直白点说就是函数名字相同,传参的个数,类型不一样。判断标准在于传参是否相同。它有以下的特点:

    1.重载只发生在同一类中。

    2.子类不能重载父类的函数

    3.在程序编译期间,编译器将

  

  重写:

    1.发生在子类和父类之间

    2.子类虚继承(使用了virtual关键字)父类的同名函数,并且原型相同

  

  重定义:

    与重写唯一不同的在于没有使用virtual关键字  

  

  名称覆盖在后面的例程说明中进行解析。

  

  本次笔记通过以下两个类为例子说明:

  parent :                     child:

  void abc();                 void abc();

 virtual void func()              virtual void func(int i)
                         virtual void func(int i, int j)             
 class Parent
{
public:
void abc()
{
printf("abc");
} virtual void func()
{
cout<<"func() do..."<<endl;
} }; class Child : public Parent
{ public:
void abc()
{
printf("child abc");
} virtual void func(int i)
{
cout<<"func(int i) do..."<<i<< " "<<j<<endl;
}
virtual void func(int i, int j, int k)
{
cout<<"func(int i, int j) do.."<< endl;
} };

    例程说明:

  父类定义了两个函数:abc 和 func

  1.子类中的abc与父类abc有相同原型,没有使用virtual关键字,属于重定义

  2.假如父类中的函数abc 声明为    virtual void abc();   那么子类则是重写函数abc

 

  3.子类的func函数定义了两个传参不同的func函数,这两个函数属于重载

  

  4.名字覆盖

  在main函数中执行以下代码:

    Child c;

    c.func();

  4.1.将会提示:无法重载父类函数。编译失败。

  4.2.在继承中子类可以调用父类的公有函数,在这里因为在子类已经有了名字为func的函数(传参不同),那么编译器会认为这是子类在重载父类的函数,在上面的概念特点描述中第一点                 已经说明重载只发生在同一类中,所以重载失败

  4.3.不能直接调用父类函数是因为,子类有同名的函数,这就名字覆盖。

  4.4.这种情况下如果仍要调用父类的func函数可以通过作用域符号进行解决:

    c.Parent::func();

C++ 学习笔记 (八)重载 重写 重定义以及名字覆盖的更多相关文章

  1. c++ 浅拷贝和深拷贝 指针和引用的区别 malloc(free)和new(delete)的区别 重载重写重定义

    4.malloc(free)和new(delete)的区别 malloc()函数: 1.1 malloc的全称是memory allocation,中文叫动态内存分配. 原型:extern void ...

  2. 重载重写重定义-易混淆概念-C++编译器处理方式

    1.函数重载 1)必须在同一个类中进行. 2)子类无法重载父类的函数,父类同名函数将被名称覆盖 3)重载是在编译期间根据参数类型和个数决定函数调用 2.函数重写 1)必须发生于父类与子类之间 2)并且 ...

  3. C++ 重载 重写 重定义

    重写:存在于类的继承,修饰符是virtual,函数的参数个数,顺序,类型,均相同. 重载:函数的参数列表,类型,顺序不相同. 重定义:对父类的函数进行屏蔽,参数列表可以不相同,没有virtual修饰

  4. c++三大概念要分清--重载,隐藏(重定义),覆盖(重写)

    重载,隐藏(重定义),覆盖(重写)—这几个名词看着好像很像,不过其实一样都不一样!! 综述: 说明:覆盖中的访问修饰符可以不同是指可以不用显示地用virtual:当访问修饰符改为const或者stat ...

  5. Java IO学习笔记八:Netty入门

    作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...

  6. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  7. go微服务框架kratos学习笔记八 (kratos的依赖注入)

    目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...

  8. Redis学习笔记八:集群模式

    作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...

  9. Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

随机推荐

  1. git 工作中常用命令(结合vscode学习git 命令)

    作为一名前端开发,大家在工作中常常使用什么开发工具呢,我觉得我首选的是vscode,他配合git使用起来非常方便. 工作中常用三个命令: git终端常使用: git add . git commit ...

  2. Angular2.0的学习(三)

    第三节课:依赖注入 1.什么是依赖注入模式及使用依赖注入的好处 2.介绍Angular的依赖注入实现:注入器和提供器 3.注入器的层级结构

  3. LeetCode 230 Kth Smallest Element in a BST 二叉搜索树中的第K个元素

    1.非递归解法 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * ...

  4. git commit之后撤销

    先git log 查看日志,找到需要回退的那次commit的哈希值 然后git reset --soft commit_id ok

  5. vector的学习

    学习链接:http://www.runoob.com/cplusplus/cpp-stl-tutorial.html kandaima #include<iostream> #includ ...

  6. mysql 链接时报错:1251-Client does not support authentication protocol requested by server

    一 原因是mysql服务器要求的认证插件版本与客户端不一致造成的. 二 由于我是最新的mysql和破解版的navicat,那么就是mysql太高级了. 解决方法有两个,我毫不犹豫的选择mysql降级. ...

  7. 11个炫酷的 Linux 终端命令

    我已经用了十年的Linux了,通过今天这篇文章我将向大家展示一系列的命令.工具和技巧,我希望一开始就有人告诉我这些,而不是曾在我成长道路上绊住我. 1.命令行日常系快捷键 如下的快捷方式非常有用,能够 ...

  8. 移植MAVLINK到STM32详细教程之三

    在前面教程的基础上继续移植优化,之前的没有加缓冲区,没有接收函数功能,这里进行统一的讲解                            作者:恒久力行  qq:624668529 缓冲区对于接 ...

  9. defer=“defer”和async=“async”

    <script type="text/javascript" src="demo_defer.js" defer="defer"> ...

  10. Pixel XL 刷机及Root详细方法

    需要准备的文件: 获取 Google USB 驱动程序并安装 https://developer.android.com/studio/run/win-usb 下载Google官方镜像文件 [8.1. ...