c++之——重载、重写、重定义
2024-10-20 01:38:54
函数重载:
必须在同一个类中进行;
子类无法重载父类的函数,父类同名函数将被子类名称覆盖;
重载是在编译期间根据参数类型和个数决定函数的调用(静态联编)。
函数重写与重定义:
重写:
必须发生在基类和派生类之间,并且父类与子类的函数必须有完全相同的函数原型;
使用virtual关键字声明之后能够产生多态(如果不使用virtual,那叫重定义);
多态是在运行期间根据具体对象的类型决定函数调用(动态联编)。
代码分析:
#include<iostream>
using namespace std; class Parent {
public:
virtual void fuc()
{
cout << "parent 无参fuc...\n";
}
virtual void fuc(int i)
{
cout << "parent 1参fuc...\n";
}
virtual void fuc(int i,int j)
{
cout << "parent 2参fuc...\n";
} };
class Child1 : public Parent
{
public:
virtual void fuc(int i, int j)
{
cout << "child 2参fuc...\n";
}
virtual void fuc(int i, int j,int k)
{
cout << "child 3参fuc...\n";
}
}; int main()
{
Child1 c1;
c1.fuc();
return ;
}
报错如下:
前面已经说过,子类无法重载父类函数,并且,子类同名函数会覆盖父类函数,所以,子类c1访问fuc函数,是没有参数的,编译器在child1中找到了fuc函数的名字,就不会去父类再找了,而child1类中没有提供无参数的fuc函数重载,所以报错,要想访问父类的无参fuc函数,可以加域作用符:
c1.Parent::fuc();
最新文章
- wex5 实战 省市县三级联动与地址薄同步
- 深入浅出 - Android系统移植与平台开发(五)- 定制手机模拟器ROM
- jQuery判断对象是否是函数
- Python获取目录、文件的注意事项
- ClassLoader类加载机制
- 安装SQL Server驱动到Maven仓库[转]
- javaweb学习总结二十六(response对象的用法二 下载文件)
- oracle 数据库 if...elsif...语句
- C#中的Explicit和Implicit
- S/4 HANA中的ACDOCT和FAGLFLEXT
- 论文阅读笔记(一)FCN
- Sublime Text3—Project(项目管理)
- GitLab查询当前版本
- C++——堆、栈、静态存储区
- RBTree和AVL
- 【SR】正则化
- Flask的请求与响应
- UOJ #55 &; 洛谷 P3920 紫荆花之恋 —— 动态点分治+替罪羊树
- 使用while 打印10~1,1~10
- 【Node.js】初识Node.js