关于C++子类父类成员函数的覆盖和隐藏

转载:http://blog.csdn.net/worldmakewayfordream/article/details/46827161

函数的覆盖

   覆盖发生的条件:

(1) 基类必须是虚函数(使用virtual 关键字来进行声明)

(2)发生覆盖的两个函数分别位于派生类和基类

(3)函数名和参数列表必须完全相同


函数的隐藏

    隐藏发生的条件:

(1)子类和父类的函数名相同,参数列表可以不一样


看完下面的例子就明白了


[cpp] view plaincopy
  1. #include "iostream"  
  2. using namespace std;  
  3. class CBase{  
  4.     public:  
  5.             virtual void xfn(int i){  
  6.                     cout << "Base::xfn(int i)" << endl; //1  
  7.             }  
  8.             void yfn(float f){  
  9.                     cout << "Base::yfn(float)" << endl; //2  
  10.             }  
  11.             void zfn(){  
  12.                     cout << "Base::zfn()" << endl;  //3  
  13.             }  
  14. };  
  15. class CDerived : public CBase{  
  16.     public:  
  17.             void xfn(int i){  
  18.                 cout << "Derived::xfn(int i)" << endl;  //4  
  19.             }  
  20.             void yfn(int c){  
  21.                 cout << "Derived:yfn(int c)" << endl;  //5  
  22.             }  
  23.             void zfn(){  
  24.                 cout << "Derived:zfn()" << endl;  //6  
  25.             }  
  26. };  
  27. void main(){  
  28.         CDerived d;  
  29.         CBase *pb = &d;  
  30.         CDerived *pd = &d;  
  31.         pb->xfn(5);  //覆盖  
  32.         pd->xfn(5);  //直接调用  
  33.   
  34.         pb->yfn(3.14f); //直接调用  
  35.         pd->yfn(3.14f);  //隐藏  
  36.   
  37.         pb->zfn();  //直接调用  
  38.         pd->zfn();  //隐藏  
  39. }  


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/384377.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构(四)串的顺序存储

#include <stdio.h> #include <stdlib.h>#define MAXLEN 255 //定长顺序存储 typedef struct {char ch[MAXLEN]; //每个分量存储一个字符int length; //串的实际长度 }SString;//串的初始化 bool StrAssign(SString& T, char* chars) {int i 0, len;char* …

数据结构(四)串的动态数组存储

#include <stdio.h> #include <stdlib.h>#define MAXLEN 255 //定长顺序存储 typedef struct {char* ch; //每个分量存储一个字符int length; //串的实际长度 }SString;//串的初始化 bool StrAssign(SString& T, char* chars) {int i 0, len;T.ch (char*)m…

C++名字隐藏

转载&#xff1a;http://www.weixueyuan.net/view/6361.html 如果派生类中新增一个成员变量&#xff0c;该成员变量与基类中的成员变量同名&#xff0c;则新增的成员变量就会遮蔽从基类中继承过来的成员变量。同理&#xff0c;如果派生类中新增的成员函数与基类中的成员函数同…

c语言深入浅出(一)strcpy和memcpy的区别

c语言深入浅出&#xff08;一&#xff09;strcpy和memcpy的区别strcpy和memcpy都是c语言的库函数 strcpy:只用于字符串的复制&#xff0c;当碰到‘\0’就停止了 memcpy:用于这个内存的拷贝&#xff0c;适用于结构体、字符数组、类等 char * strcpy(char * dest, const char * s…

C++ dynamic_cast操作符

转载&#xff1a;http://www.weixueyuan.net/view/6377.html 在C中&#xff0c;编译期的类型转换有可能会在运行时出现错误&#xff0c;特别是涉及到类对象的指针或引用操作时&#xff0c;更容易产生错误。Dynamic_cast操作符则可以在运行期对可能产生问题的类型转换进行测试。…

数据结构(五)树

数据结构&#xff08;五&#xff09;树一、基本操作树是n个节点的有限集&#xff0c;它是一种递归的数据结构 一、基本操作 #include <stdio.h> #include <stdlib.h> #include <iostream>#define Elemtype charusing namespace std; typedef struct BiTNod…

C++ typeid操作符

转载&#xff1a;http://www.weixueyuan.net/view/6378.html typeid操作符用于判断表达式的类型&#xff0c;注意它和sizeof一样是一个操作符而不是函数。如果需要使用typeid操作符&#xff0c;最好加上typeinfo头文件。 给出以下定义 int a;double b;char * c;long d; 下表列…

数据结构(五)层次遍历

数据结构&#xff08;五&#xff09;层次遍历// linear_listqueue.cpp : This file contains the main function. Program execution begins and ends there. //#include <iostream> #include <stdlib.h> #include <stdio.h> #define ElemType BiTree using …

C++成员函数指针的应用

转载&#xff1a;http://www.cppblog.com/colys/archive/2009/08/18/25785.html C中&#xff0c;成员指针是最为复杂的语法结构。但在事件驱动和多线程应用中被广泛用于调用回叫函数。在多线程应用中&#xff0c;每个线程都通过指向成员函数的指针来调用该函数。在这样的应用中…

cv2.VideoCapture()无法打开视频解决方法

cv2.VideoCapture无法打开视频解决方法问题解决方法问题 cv2.VideoCapture打开mp4文件&#xff0c;直接报错 解决方法 我们打开D:\opencv_3.4.2_Qt\opencv_3.4.2_Qt\x86\bin\&#xff08;opencv的dll动态库中找到&#xff09; 找到opencv_ffmpeg342.dll文件&#xff0c;放入…

函数指针指向类的静态成员函数

转载&#xff1a;http://www.cnblogs.com/dongyanxia1000/p/4906592.html 1. 代码 1 #include<iostream>2 #include<stdio.h>3 using namespace std;4 class Point5 {6 public:7 Point(int x0,int y0):x(x),y(y)8 { 9 count; 10 } 11 P…

Qt+OpenCV打开视频文件并在窗口界面上显示

QtOpenCV打开视频文件并在窗口界面上显示1、新建一个Qt Widgets Application&#xff0c;工程配置文件&#xff08;.pro文件&#xff09;内容如下&#xff1a;#------------------------------------------------- # # Project created by QtCreator 2021-03-19T09:06:07 # #--…

OpenCV Mat的数据类型

OpenCV Mat的数据类型Mattype类型内存拷贝简单实现Mat Mat类(Matrix的缩写)是OpenCV用于处理图像而引入的-一个封装类。他是一个自动内存管理工具。 Mat:本质上是由两个数据部分组成的类:(包含信息有矩阵的大小&#xff0c;用于存储的方法&#xff0c;矩阵存储的地址等)矩阵头…

C++指向成员函数的指针

转载&#xff1a;http://www.cnblogs.com/tracylee/archive/2012/11/15/2772176.html C指向函数的指针定义方式为&#xff1a; 返回类型 &#xff08;*指针名&#xff09;&#xff08;函数参数列表&#xff09;&#xff0c;例如 void &#xff08;*p&#xff09;&#xff08;in…

OpenCV基础知识 图像

OpenCV基础知识 图像位图模式灰度模式RGB模式位图模式 位图模式是是1位深度的图像&#xff0c;只有黑和白两种颜色。它可以由扫描或置入黑色的矢量线条图像生成&#xff0c;也能由灰度模式转换而成。其他图像模式不能直接转换为位图模式。 灰度模式 灰度模式是8位的图像&…

C++中引用与指针的区别(详细介绍)

转载&#xff1a;http://www.cnblogs.com/tracylee/archive/2012/12/04/2801519.html C&#xff0b;&#xff0b;中的引用与指针的区别指向不同类型的指针的区别在于指针类型可以知道编译器解释某个特定地址&#xff08;指针指向的地址&#xff09;中的内存内容及大小&#xff…

mysql远程连接权限grant all privileges on *.* to ‘root‘@‘%‘ identified by ‘123456‘ with grant option语句报错

mysql远程连接权限grant all privileges on *.* to ‘root‘‘%‘ identified by ‘123456‘ with grant option语句报错记录一下自己安装mysql遇到的小坑grant all privileges on *.* to ‘root‘‘%‘ identified by ‘123456‘ with grant option只适用于mysql8.0之前的版本…

C++虚继承的概念

转载&#xff1a;http://blog.csdn.net/crystal_avast/article/details/7678704 C中虚拟继承的概念 为了解决从不同途径继承来的同名的数据成员在内存中有不同的拷贝造成数据不一致问题&#xff0c;将共同基类设置为虚基类。这时从不同的路径继承过来的同名数据成员在内存中就只…

数组名和取数组名的区别

先来个简单的小案例 #include <stdio.h> #include <iostream>using namespace std;int main() {int a[10] { 0 };printf("%d\n", a);printf("%d\n", &a);printf("%d\n", a1);printf("%d\n", &a1);printf("…

C++继承详解三 ----菱形继承、虚继承

转载&#xff1a;http://blog.csdn.net/pg_dog/article/details/70175488 今天呢&#xff0c;我们来讲讲菱形继承与虚继承。这两者的讲解是分不开的&#xff0c;要想深入了解菱形继承&#xff0c;你是绕不开虚继承这一点的。它俩有着什么关系呢&#xff1f;值得我们来剖析。 菱…