zoukankan      html  css  js  c++  java
  • C++继承类同名数据成员被隐藏,其实都在内存里,转换后都可以被使用

    #include "stdafx.h"
    
    class A {
    public:
    int i;
    A() { i=1; }
    };
    
    class B: public A {
    public:
    int i;
    B() { i=2; }
    };
    
    class C: public B {
    public:
    int i;
    C() { i=3; }
    };
    
    
    int main(int argc, char* argv[])
    {
    A a1;    printf(" %d
    ", a1.i); 
    B a2;    printf(" %d
    ", a2.i); 
    C a3;    printf(" %d
    ", a3.i);
    
    printf(" %d
    ", ((B)a2).i);
    printf(" %d
    ", ((B)a3).i);
    printf(" %d
    ", ((C)a3).i);
    
    printf(" %d
    ", sizeof(a1));
    printf(" %d
    ", sizeof(a2));
    printf(" %d
    ", sizeof(a3));
    
    return 0;
    }

    打印结果:

    1
    2
    3
    2
    2
    3
    4
    8
    12

    但是仍可以这样调用:

    //: HIDE.CPP -- Name hiding during inheritance
    class homer {
    public:
        int i;
        homer() {i=100; }
        int doh(int) const { return 1; }
        char doh(char) const { return 'd';}
        float doh(float) const { return 1.0; }
    };
    
    class bart : public homer {
    public:
        int i;
        bart() {i=200; }
        class milhouse {};
        void doh(milhouse) const {}
    };
    
    main() {
        bart b;
        b.homer::doh(1); // 调用隐藏函数
        printf("%d %d
    ", b.homer::i, b.i); // 调用隐藏属性
        //! b.doh('x'); // Error
        //! b.doh(1.0); // Error
    }

    正确输出:100 200

  • 相关阅读:
    SQLite增删改查(自己写SQL语句)
    Why you have so few friends?
    android数据库SQLite简单测试
    C语言 stringcpy,stringcat,stringcmp实现
    python 日期和时间
    Python continue 语句
    Python break 语句
    Python 循环语句
    Python 条件语句
    Python比较运算符
  • 原文地址:https://www.cnblogs.com/findumars/p/3687823.html
Copyright © 2011-2022 走看看