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();

 

posted @ 2017-03-11 13:57  Crystal_Guang  阅读(858)  评论(0编辑  收藏  举报