c++之——重载、重写、重定义
函数重载:
必须在同一个类中进行;
子类无法重载父类的函数,父类同名函数将被子类名称覆盖;
重载是在编译期间根据参数类型和个数决定函数的调用(静态联编)。
函数重写与重定义:
重写:
必须发生在基类和派生类之间,并且父类与子类的函数必须有完全相同的函数原型;
使用virtual关键字声明之后能够产生多态(如果不使用virtual,那叫重定义);
多态是在运行期间根据具体对象的类型决定函数调用(动态联编)。
代码分析:
1 #include<iostream>
2 using namespace std;
3
4 class Parent {
5 public:
6 virtual void fuc()
7 {
8 cout << "parent 无参fuc...\n";
9 }
10 virtual void fuc(int i)
11 {
12 cout << "parent 1参fuc...\n";
13 }
14 virtual void fuc(int i,int j)
15 {
16 cout << "parent 2参fuc...\n";
17 }
18
19 };
20 class Child1 : public Parent
21 {
22 public:
23 virtual void fuc(int i, int j)
24 {
25 cout << "child 2参fuc...\n";
26 }
27 virtual void fuc(int i, int j,int k)
28 {
29 cout << "child 3参fuc...\n";
30 }
31 };
32
33
34 int main()
35 {
36 Child1 c1;
37 c1.fuc();
38 return 0;
39 }
报错如下:
前面已经说过,子类无法重载父类函数,并且,子类同名函数会覆盖父类函数,所以,子类c1访问fuc函数,是没有参数的,编译器在child1中找到了fuc函数的名字,就不会去父类再找了,而child1类中没有提供无参数的fuc函数重载,所以报错,要想访问父类的无参fuc函数,可以加域作用符:
c1.Parent::fuc();
欢迎加入作者的小圈子
扫描下方左边二维码加入QQ交流群,扫描下方右边二维码关注个人微信公众号并获取更多隐藏干货,QQ交流群:816747642 微信公众号:Crystal软件学堂
作者:Crystal软件学堂 bilibili视频教程地址:https://space.bilibili.com/5782182 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在转载文章页面给出原文连接。 如果你觉得文章对你有所帮助,烦请点个推荐,你的支持是我更文的动力。 文中若有错误,请您务必指出,感谢给予我建议并让我提高的你。 |