类的继承私有成员问题

类的继承过程分为公有继承,保护继承和私有继承,不管哪一种继承,基类的私有成员在派生类成员中都是不可见的,但是基类的私有成员是否被派生类继承了呢?通过下面实验就可以知道。

代码例如以下:

#include <iostream>
using namespace std;
class Base {
public:
Base():a(5){}
private:
     virtual void f() { cout << "Base::f" << endl; }
     int a;

};
class Derive : public Base{

};
void main() {
    Derive d;
    int** pVtab = (int**)&d;
    Fun  pFun = (Fun)pVtab[0][0];
    cout<<sizeof(Base)<<sizeof(Derive)<<endl;
    pFun();
    cout<<(int)pVtab[1]<<endl;
    return ;
}

监视窗体例如以下图:

执行结果例如以下:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemxsYnVhYQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" >

由以上可知,基类的私有成员被派生类继承了,而类的对象空间没有响应的常规函数成员的分布。同一时候依据类的对象的内存空间的分布。我们能够在类外訪问类的私有成员。

时间: 2024-10-05 21:34:28

类的继承私有成员问题的相关文章

python-装饰器,类与对象,私有字段,析构,__call__,继承,多继承,接口

1.装饰器执行流程 装饰器:将原函数替换为wrapper函数 def outer() @outer  --- func1作为参数传入outer() def wrapper()  --- wrapper()放入内存 return wrapper   --- 返回wrapper地址,Func1重新赋值为wrapper Func1()  --- 调用func1函数 def wrapper() print '验证' def Func1() print 'func1' [[email protected]

js模块,类,继承,命名空间,私有属性等相关概念梳理

js确切的说是一种基于对象的语言,和纯面向对象的语言(比如as)稍微有点区别,js中没有类的概念.虽然有继承但是基于原型的继承.随着前段越来越受重视,jser们利用js的一些特性他们制造出了和纯面向对象一样好玩的东西.下面就js中一些概念进行概述,很多东西都是来自博客园的一些大牛,我写这篇文章主要想拿as和js做对比来讲,以方便as像转js的程序员们.本片文章涉及的概念有,模块,类,继承,私有属性和公开属性. 1.模块大家写as的时候都知道,as里面是有类的概念,每次生成一个类,系统中都会多一个

分类 类扩展 继承 协议 委托

分类 类扩展 继承 协议 委托 分类(Category) 不产生新类,不修改原类,但有自己的.h和.m文件 分类只能向原类中增加方法,或者重写原类的方法 声明的@property只会生成getter setter方法的声明 类.h中定义的方法必须实现,但分类.h中定义的方法,可以不实现 同名方法,分类的优先级高类别主要有3个作用:(1)将类的实现分散到多个不同文件或多个不同框架中.(2)创建对私有方法的前向引用.(类.h中未声明,但存在于.m中的私有方法,通过在分类.h中声明一下,就可以在其他类

javascript“类”与继承总结和回顾-韩烨

Javascipt语法不支持"类"(class)[es6已经支持],但是有模拟类的方法.今天我主要谈谈Javascipt中模拟"类"的方法及js中继承的总结和回顾. js中实现"类"与继承,既是重点,又是难点.很多同学可能都对js中"类"与继承都有所了解,但是深入剖析的时候,感觉力不从心.模棱两可. 下面我们一起来总结一下,巩固提高一下js的基础知识.关于js的基础知识,我在之前写过一个关于js老生常谈之this,constr

c++类和继承

先说说 类 如果你正在写一个网络游戏 这个游戏里面有很多怪物是吧 新手要打的怪物有 鸡啊 狗啊 猪啊 鱼啊 网络游戏是要更新的 也许你游戏一刚出来 只能打鸡 然后玩家都练到满级了 你需要继续吸引玩家 砸门就引入新的怪物 狗啊 猪啊 鱼啊..... 显然 面向对象的方法是 为每种怪物写个类 (class 鸡 ,class 狗 ,class猪,class 鱼)刷新生成怪物的时候就 创建对应的对象 删除对象 就是怪物死了. 然后你可能要问,为什么要用类啊?类是用来干什么的呢?我们来解释下: 首先这里有

Java编程里类的继承

今天,我们将要讨论的内容是Java里面类的继承的相关概念. 说到继承,我相信大家都不陌生.生活中,子承父业,子女继承父母的财产,这就是继承.实际上,Java里的继承也是如此.对于一个类来说,它的数据成员和方法就是它的财产,而申明另一个类接收了这个类的财产,这就是Java里的继承. 接下来我将就几个方面,谈一谈继承的相关知识. 一.继承的基本格式与意义 在上文,我们了解了什么叫做继承.那么,如何使用继承? 继承的关键词是extends.继承的一般格式为:public class 类名 extend

C++ 类的继承一(访问控制)

//类的继承 #include<iostream> using namespace std; /* 面向对象中的继承类之间的父子关系 1.子类拥有父类所有的成员属性和成员函数(包括私有成员变量) 2.子类就是一种特殊的父类 3.子类对象可以当作父类对象使用 4.子类可以拥有父类没有的方法和属性 c++中的类成员访问级别(public,protected,private) 类成员访问级别设置原则 1.需要被外界访问的成员直接设置为public 2.只能在当前类中访问的成员设置为private 3

【代码笔记】Java基础:类的继承(构造器)

在Java中,创建对象的格式为: 类名 对象名 = new 类名(): 如: 1 JFrame jf = new JFrame(); 一个对象被创建出来时,经常要先做一些事这个对象才能正常使用,也可以说是准备工作,比如给这个对象赋些初始值,或者先运行一些别的方法.这时候就需要一个“构造器”用于: 构造对象 初始化属性这样,把那些在创建时要做的事写在构造方法里,每次创建就会被执行一遍. 我们常见的一种Java格式: public 返回类型 方法名(参数){ } 如: 1 public void s

黑马程序员-----类的继承和派生概念

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ----- 第一讲 类的继承和派生概念 本小节知识点: 1.[理解]什么是继承? 2.[掌握]类的继承和派生概念 1.什么是继承? 2.OC中的继承与派生 1 #import <Foundation/Foundation.h> 2 3 @in