令人迷惑的隐藏规则

令人迷惑的隐藏规则

本来仅仅区别重载与覆盖并不算困难,但是 C++的隐藏规则使问题复杂性陡然增加。 这里“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

(1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无 virtual 关键字,基类的函数将被隐藏(注意别与重载混淆)。

(2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有 virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)。

 

 1 #include <iostream>
 2 
 3 /* run this program using the console pauser or add your own getch, system("pause") or input loop */
 4 using namespace std;
 5 int main(int argc, char** argv) {
 6      //定义结构类型
 7     struct human {
 8        char name[10];
 9        int sex;
10        int age;
11     };
12 
13     //声明结构变量和结构指针变量,并初始化
14     struct human x={"WangPing",1,30},*p=NULL;
15 
16     //结构指针变量指向对象
17     p=&x;
18 
19     //显示结构变量的值
20     cout<<"x.name="<<x.name<<endl;
21     cout<<"x.sex="<<x.sex<<endl;
22     cout<<"x.age="<<x.age<<endl;
23   
24     //利用结构指针显示结构对象中的数据
25     cout<<"(*p).name="<<(*p).name<<endl;
26     cout<<"(*p).sex="<<(*p).sex<<endl;
27     cout<<"(*p).age="<<(*p).age<<endl;
28     cout<<"p->name="<<p->name<<endl;
29     cout<<"p->sex="<<p->sex<<endl;
30     cout<<"p->age="<<p->age<<endl;
31 
32     //通过结构指针为结构对象输入数据
33     cout<<"name:";
34     cin>>(*p).name;
35     cout<<"sex:";
36     cin>>(*p).sex;
37     cout<<"age:";
38     cin>>(*p).age;
39 
40     //显示结构变量的值
41     cout<<"x.name="<<x.name<<endl;
42     cout<<"x.sex="<<x.sex<<endl;
43     cout<<"x.age="<<x.age<<endl;
44     return 0;
45 }

 

posted @ 2018-08-02 12:46  borter  阅读(151)  评论(0编辑  收藏  举报