confusing c++ 重写 与 重定义 记录1
class parent {
public:
void f() { cout << "parent f()" << endl; }
void f(int i) { cout << "parent f(int i)" << endl; }
};
class child :public parent {
};
int main() {
child a;
a.f();
a.f();
return ;
}
父类中发生了重载。
子类中如果没有定义名字冲突的成员函数,这时候,父类中的两个函数都可以访问。
class child2 :public parent {
public:
void f() {
cout << "child f()" << endl;
}
};
int main() {
child2 a;
parent *p = &a;
child2 *c = &a;
a.f(); //child f()
a.parent::f(); //parent f()
a.parent::f(); //parent f(2)
p->f(); // parent f()
p->f(); // parent f(2)
c->f(); // child f()
// c->f(2); illegal
return ;
}
有冲突的时候,a只能直接访问自己定义的这个。
父类中的f必须通过a.parent::f这样的方式访问。这三个是并存的。
加了virtual以后呢?
confusing c++ 重写 与 重定义 记录1的更多相关文章
- C++重载,重写,重定义
1.重载:重载是在一个类中,函数名一样,参数类型或参数个数不同的一系列函数需要注意的是,与返回类型无关. class Test { public: void show(); void show(int ...
- C++函数重载,重写,重定义
目录 1 重载 2 重写 3 重定义 4 函数重载二义性 笔者原创,转载请注明出处 C++中经常会提到重载,除了重载,还有重写,重定义,下面对这三个概念逐一进行区分 1 重载 函数重载是同 ...
- c++之——重载、重写、重定义
函数重载: 必须在同一个类中进行: 子类无法重载父类的函数,父类同名函数将被子类名称覆盖: 重载是在编译期间根据参数类型和个数决定函数的调用(静态联编). 函数重写与重定义: 重写: 必须发生在基类和 ...
- C++纯虚函数、虚函数、实函数、抽象类,重载、重写、重定义
首先,面向对象程序设计(object-oriented programming)的核心思想是数据抽象.继承.动态绑定.通过数据抽象,可以使类的接口与实现分离,使用继承,可以更容易地定义与其他类相似但不 ...
- C++ 类的多态二(函数重载--函数重写--函数重定义)
//函数重载--函数重写--函数重定义 #include<iostream> using namespace std; /* 函数重载: 必须在一个类中进行(子类无法重载父类中的函数) 子 ...
- c++继承关系中成员函数的重载、重写、重定义之间的区别
1.Override.Overload.Redefine Overload 重载只能发生在类内部,不能发生在子类和父类的继承中.具体来说,如果子类中有父类同名.同返回值类型,但是不同参数列表,这两个在 ...
- C++ 重载、重写、重定义的区别
C++ 中 重载.重写.重定义的区别 重载(overload) 定义: 在同一个作用域内,两函数的函数名相同, 参数不相同(可以是参数类型不同或者是参数个数不同), 那么就说这两个 函数重载. 分类: ...
- C++ 重载、重写、重定义
出自:http://blog.163.com/clevertanglei900@126/blog/ 1 成员函数重载特征: a 相同的范围(在同一个类中) b 函数名字相同 c 参数不同 d virt ...
- C++学习笔记 封装 继承 多态 重写 重载 重定义
C++ 三大特性 封装,继承,多态 封装 定义:封装就是将抽象得到的数据和行为相结合,形成一个有机的整体,也就是将数据与操作数据的源代码进行有机的结合,形成类,其中数据和函数都是类的成员,目的在于将对 ...
随机推荐
- R语言——实验4-人工神经网络
带包实现: rm(list=ls()) setwd("C:/Users/Administrator/Desktop/R语言与数据挖掘作业/实验4-人工神经网络") Data=rea ...
- Linux系统安装(centos6.8)符破解码
1.安装 VMware VMware 是一个虚拟 PC 的软件,可以在现有的操作系统上虚拟出一个新的硬件环境,相当于模拟出一台新的 PC,我们可以在上面构造出一个或多个别的系统,以此来实现在一台机器上 ...
- if判断、while循环、for循环
一. if判断 基本结构: if 执行语句1 print(代码块1); print(代码块2); # 满足执行语句1时,执行代码块1和代码块2,否则只执行代码块2. if 执行语句1 print(代码 ...
- [UE4]增加机器人
一.新增蓝图继承自Shooter名为AIShooter.玩家角色也是继承自Shooter. 二.使用AIMoveTo追踪玩家.玩家控制的角色调用这个方法没反应. 三.关卡中添加组件NavMeshBou ...
- c#类的继承与包含的关系
基础例子 class Dept { private string name; private Emp emp; public string getName() { return this.name; ...
- 2017湖湘杯复赛writeup
2017湖湘杯复赛writeup 队伍名:China H.L.B 队伍同时在打 X-NUCA 和 湖湘杯的比赛,再加上周末周末周末啊,陪女朋友逛街吃饭看电影啊.所以精力有点分散,做出来部分题目,现在 ...
- lightgbm的sklearn接口和原生接口参数详细说明及调参指点
class lightgbm.LGBMClassifier(boosting_type='gbdt', num_leaves=31, max_depth=-1, learning_rate=0.1, ...
- Linux安装jsvc,及Linux服务开发
在linux上以服务的方式启动java程序,需要提前安装jsvc.linux是利用daemon(jsvc)构建java守护进程. 编译 daemon 安装JSVC 1 下载文件,http://comm ...
- [SQL]用SQL语句断开某个数据库的所有活动连接
USE master go IF EXISTS ( SELECT * FROM dbo.sysobjects WHERE id = OBJECT_ID(N'[dbo].[P_KillConnectio ...
- 08 bash特性--shell脚本编程入门
shell脚本编程入门 编程语言介绍 编程语言分为:机械语言.汇编语言和高级语言: 计算机能识别的语言为机械语言,而人类能学习的并且能够方便掌握的为高级语言,所以,我们所编写的程序就要通过编译来转换成 ...