c++ 重载、重写、重定义(隐藏)
3.重定义 (redefining):
子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 ) 。
4.隐藏
// // main.cpp // TestOveride // // Created by New_Life on 2017/4/26. // Copyright © 2017年 chenhuan001. All rights reserved. // #include <iostream> #include <stdio.h> #include <string.h> using namespace std;class A { public:void overload_print(int a) {// 1cout << "overload A: a" << endl;}void overload_print(int a, int b) {// 2,重载1cout << "overload A: a , b" << endl;}/* 编译错误,不能出现重载* Functions that differ only in their return type cannot be overloaded* overload_print(1) 的时候,谁知道你调用的什么。int overload_print(int a) {return 1;}*//* 编译错误,static 与 virtual 定义冲突* 虚函数只能出现在no-static中* 'virtual' can only appear on non-static member functionsstatic virtual void virtual_print() {cout << "virtual A: " << endl;}*/void redefine_print() {//3cout << "redefine A: " << endl;}// -------------- Test hidden ----------------// void hidden_print() {cout << "hidden A:" << endl;}void hidden_print(int a) {cout << "hidden A: a" << endl;}private:virtual void override_print() {// 4cout << "override A: " << endl;}void redefine_print(int a) {// 5cout << "redefine priavte A: a" << endl;} };class B : public A { public:void override_print() { //重写(覆盖)了4, private -> public,其实可以看出是一个新的。cout << "override B: " << endl;}void redefine_print() {//重定义 3cout << "redefine B: " << endl;}void redefine_print(int a) {//重定义 5, 说明父类为private的函数也能重定义,也可以看出一个新的。cout << "redefine B: a" << endl;}// ------------- Test hidden -----------------// void hidden_print(int a, int b) {cout << "hidden B: a, b" << endl;} };int main(int argc, const char * argv[]) {B b;b.overload_print(1, 2); //打印 重载 b.override_print(); //打印 重写 b.redefine_print(); //打印重定义b.redefine_print(1); //打印重定义,private/* 编译错误,因为这两个父类的函数,因为同名被隐藏了。使用b.A::hidden_print(), b.A::hidden_print(1)即可* Too few arguments to function call, expected 2, have 0; did you mean 'A::hidden_print'?b.hidden_print();b.hidden_print(1);*/b.hidden_print(1, 2);return 0; }
c++ 重载、重写、重定义(隐藏)相关推荐
- 第九天2017/04/18(3、重载/覆盖 PK 重写/重定义、父类子类混搭风、抽象类)
1.重载/覆盖 PK 重写/重定义 [预备知识] 函数重载必须在同一个类中发生子类无法重载父类的函数,父类同名的函数将会被名称覆盖重载是在编译期间根据参数类型和个数决定函数调用重载只放在同一个类之中, ...
- 重写重载与重定义的区别
1 成员函数重载特征: a 相同的范围(在同一个类中) b 函数名字相同 c 参数不同 d virtual关键字可有可无 2 重写(覆盖)是指派生类函数覆盖基类函数,特征是: ...
- 父子类之间,成员函数重写、重载以及重定义的区别
1.重写override:也叫做覆盖.子类重新定义父类中有相同名称和参数列表的虚函数.函数特征相同. 重写需要注意: 1) 被重写的函数不能是static的.必须是virtual的 2) 重写函数必须 ...
- 重载、重定义、虚函数
转自:http://www.cnblogs.com/j2eee/archive/2006/09/22/511954.html 函数重载 如何讲函数重载: What--函数重载是什么? why--为什么 ...
- 【校招面试 之 C/C++】第12题 C++ 重载、重写和重定义
1.成员函数重载特征: a.相同的范围(在同一个类中): b.函数名字相同: c.参数不同(参数个数不同或者参数类型不同,但是返回值不同不能使重载): d.virtual关键字可有可无. 2.重 ...
- C++中的覆盖(重写)、重载、隐藏(重定义)、多态!
例一: 首先声明Base类型的指针指向实际类型为Derived的对象,先调用基类构造函数,再调用派生类构造函数.输出Base, Derived. base->echo(); 指针是base类型, ...
- 重载、重写(覆盖)、重定义(同名隐藏)的区别
重载:指在同一作用域中允许有多个同名函数,而这些函数的参数列表不同,包括参数个数不同,类型不同,次序不同,返回值相同与否并不影响是否重载: 重写和重定义则有点像,区别就是在写重写的函数是否是虚函数,只 ...
- c语言 方法重载 冲定义,C++ 重载(overload)、重写(overrride)、重定义(redefine)
今天参加了一个面试,问到了上面的C++知识点,都知道,时间久了难免遗忘,感觉回答的一般,不够专业,部分点还答错了,sigh!在此再补漏下. 注意:这些都是C++语言的特性,C语言连最简单的重载(ove ...
- C++ 重载(overload)、重写(overrride)、重定义(redefine)总结
昨晚打开论坛,看到有朋友问了一个关于虚函数的问题,因为头太疼了,所以今天中午起床再看. 问题传送门:http://www.cppleyuan.com/viewthread.php?tid=7923 C ...
最新文章
- LeetCode 52. N皇后 II
- 3 年血亏 10 亿美元,Google Deepmind 出了什么问题?
- 网络营销专员浅析网络营销优化对企业来说意味着什么?
- zabbix—安装agent客户端(linux版)
- C/C++头文件区别
- 守护线程与非守护线程
- docker hub 代理_MAC版 的最新Docker 2.2版本配置国内代理的解决办法
- c语言输入与输出库函数#includestdio.h
- 银行不是很喜欢客户分期吗?为何申请信用卡分期被拒绝了?
- IE FF css兼容
- 计算机专业毕业设计—351个VB管理系统源码打包(计算机专业整理)
- 千钧一发之际赢得暂缓令,苹果App Store要反败为胜了?
- 1156 Sexy Primes (20 分)(质数 模拟
- win10镜像无法再此计算机上运行,Win10镜像无法安装提示“运行此工具时出现问题”的两种解决方案...
- 用window调用kjb和ktr
- java编程实现;猜单词游戏
- 植物图像识别python_python实现图像识别功能
- Facade模式的介绍
- AntV G6 的坑之——从卡掉渣到满帧需要几步
- Google Earth Engine(GEE)简单介绍及注册