1. #include "stdafx.h"
  2.  
  3. class A {
  4. public:
  5. int i;
  6. A() { i=; }
  7. };
  8.  
  9. class B: public A {
  10. public:
  11. int i;
  12. B() { i=; }
  13. };
  14.  
  15. class C: public B {
  16. public:
  17. int i;
  18. C() { i=; }
  19. };
  20.  
  21. int main(int argc, char* argv[])
  22. {
  23. A a1; printf(" %d\n", a1.i);
  24. B a2; printf(" %d\n", a2.i);
  25. C a3; printf(" %d\n", a3.i);
  26.  
  27. printf(" %d\n", ((B)a2).i);
  28. printf(" %d\n", ((B)a3).i);
  29. printf(" %d\n", ((C)a3).i);
  30.  
  31. printf(" %d\n", sizeof(a1));
  32. printf(" %d\n", sizeof(a2));
  33. printf(" %d\n", sizeof(a3));
  34.  
  35. return ;
  36. }

打印结果:

1
2
3
2
2
3
4
8
12

但是仍可以这样调用:

  1. //: HIDE.CPP -- Name hiding during inheritance
  2. class homer {
  3. public:
  4. int i;
  5. homer() {i=; }
  6. int doh(int) const { return ; }
  7. char doh(char) const { return 'd';}
  8. float doh(float) const { return 1.0; }
  9. };
  10.  
  11. class bart : public homer {
  12. public:
  13. int i;
  14. bart() {i=; }
  15. class milhouse {};
  16. void doh(milhouse) const {}
  17. };
  18.  
  19. main() {
  20. bart b;
  21. b.homer::doh(); // 调用隐藏函数
  22. printf("%d %d\n", b.homer::i, b.i); // 调用隐藏属性
  23. //! b.doh('x'); // Error
  24. //! b.doh(1.0); // Error
  25. }

正确输出:100 200

C++继承类同名数据成员被隐藏,其实都在内存里,转换后都可以被使用的更多相关文章

  1. 读书笔记 effective c++ Item 22 将数据成员声明成private

    我们首先看一下为什么数据成员不应该是public的,然后我们将会看到应用在public数据成员上的论证同样适用于protected成员.最后够得出结论:数据成员应该是private的. 1. 为什么数 ...

  2. 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成员)

    [源码下载] 不可或缺 Windows Native (21) - C++: 继承, 组合, 派生类的构造函数和析构函数, 基类与派生类的转换, 子对象的实例化, 基类成员的隐藏(派生类成员覆盖基类成 ...

  3. 【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态

    一. Objective-C 方法详解 1. 方法属性 (1) OC 方法传参机制 Object-C 方法传参机制 : OC 中得参数传递都是值传递, 传入参数的是参数的副本; -- 基本类型 (值传 ...

  4. CLR via C#(05)- 访问限定、数据成员

    今天跟大家分享一下关于访问限定和数据成员的知识.主要包括以下两点: Abstract, sealed, virtual, new, override怎么用? Const 和 readonly好像都表示 ...

  5. 静态数据成员(面向对象的static关键字)

    静态数据成员: 在类内数据成员的声明前加上关键字static,该数据成员就是类内的静态数据成员.先举一个静态数据成员的例子. #include<iostream> using namesp ...

  6. C++学习5-面向对象编程基础(构造函数、转换构造、静态数据成员、静态成员函数、友元)

    知识点学习 类 const作用 C语言的const限定符的含义为"一个不能改变值的变量",C++的const限定符的含义为"一个有类型描述的常量": const ...

  7. Java中类的数据成员的初始化顺序

    对于单一类: 属性初始化 ---> 按顺序执行静态初始化块(只能操作静态属性) ---> 按顺序执行初始化块 ---> 构造方法 对于存在继承关系的类: 父类属性初始化 ---> ...

  8. C++:用成员初始化列表对数据成员初始化

    1.在声明类时,对数据成员的初始化工作一般在构造函数中用赋值语句进行. 例如: class Complex{ private: double real; double imag; public: Co ...

  9. 3第一周课后练习&#183;阅读计划(2)-使用指针来访问私有数据成员

    /* * Copyright (c) 2015, 计算机科学学院,烟台大学 * All rights reserved. * 文件名:test.cpp * 作 靠:刘畅 * 完成日期:2015年 3 ...

随机推荐

  1. POJ 2577: Interpreter

    简略解题报告 Description A certain computer has 10 registers and 1000 words of RAM. Each register or RAM l ...

  2. 微信小程序之微信支付C#后台(统一下单)

    一.微信小程序支付 1.微信小程序端请求支付接口 商户在小程序中先调用该接口在微信支付服务后台生成预支付交易单,返回正确的预支付交易后调起支付.具体可以查看接口示例. 接口传入参数示例: <xm ...

  3. Web Cache

    我们都知道,网站对于一些常用数据做缓存,会加速网站访问,像下面这样: public string GetFoo() { if ( cache.get("Foo") == null ...

  4. Tyvj——P1952 Easy

    http://www.tyvj.cn/p/1952 描述 某一天WJMZBMR在打osu~~~但是他太弱逼了,有些地方完全靠运气:(我们来简化一下这个游戏的规则有n次点击要做,成功了就是o,失败了就是 ...

  5. [ONTAK2010]Peaks

    题目大意: 一个图上有$n(n\leq100000)$个带权点,$m(m\leq500000)$条带权边.有$q(q\leq500000)$组询问,每次询问从点$v$出发,只经过权值小于等于$x$的边 ...

  6. 微信小程序提交 webapi FormDataCollection

    /// <returns></returns> [HttpPost] public ShoppingCartModel UpdateCart(FormDataCollectio ...

  7. Jackson对泛型的序列化和反序列化方法汇总

    说明:Jackson对于简单泛型是可以正常操作的,但是如果对于太过于复杂的泛型类有时会不成功.目前还在找着更合适的Json库.不过这一点在dotnet原生方案JavaScriptSerializer可 ...

  8. javascript好文---深入理解定位父级offsetParent及偏移大小

    前面的话 偏移量(offset dimension)是javascript中的一个重要的概念.涉及到偏移量的主要是offsetLeft.offsetTop.offsetHeight.offsetWid ...

  9. Windows10下Apache2.4配置Django

    开发环境 Windows 10 x64 Apache 2.4 x64 Python 2.7.11 x64 Django 1.9.6+ 下载和安装mod_wsgi 到 http://download.c ...

  10. Direct2D教程(二)来看D2D世界中的Hello,World

    引子 任何一门语言的第一个教程几乎都是Hello,world.我们也不例外,但是这里不是教大家打印Hello,world,而是编写一个简单的D2D绘制程序,让大家对Direct2D的程序结构及编程方法 ...