• 令人迷惑的隐藏规则


    令人迷惑的隐藏规则

    本来仅仅区别重载与覆盖并不算困难,但是 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 }
  • 相关阅读:
    firefox上网问题解决
    ubuntu内核的编译安装
    ubuntu常用命令
    source insight 添加文件类型
    ubuntu版本查看命令
    百年孤独与拉丁美洲历史--转载
    Guess Number Higher or Lower II--困惑
    Symmetric Tree
    一棵开花的树
    yii2 mysql数据库读写分离配置
  • 原文地址:https://www.cnblogs.com/borter/p/9406513.html
Copyright © 2020-2023  润新知