zoukankan      html  css  js  c++  java
  • 记录二 20180418

    1、数据库的事务的四个属性(数据库)

    2、数据库缓存保证读取数据一致性的策略(数据库)

    3、进程和线程的区别(操作系统)

    4、死锁的条件(操作系统)

    5、阻塞和非阻塞IO(网络编程)

    6、进程之间的通信方式(操作系统)

    7、策略模式(设计模式)

    8、二分查找(算法)

    9、一个由0/1元素组成的二维矩阵a[M][N],求由1组成的最大的正方形面积(算法,动态规划)

    10、类的对象是在内存中是如何存储的?

    按理说同一个类定义了多个对象,那么就需要分别为每个对象的数据和函数分配存储单元,而C++编译系统则把共用的函数代码放在代码区,而每个对象所占的内存只是该对象的数据部分,虚函数指针和虚基类指针也属于数据部分,而不包括函数代码所占用的空间。

    全局变量、静态数据和常量放在全局数据区中,而类的成员函数和非成员函数代码存放在代码区,局部变量、参数、返回数据/地址存在栈区,其余的存在堆区。

    因此,类在定义的时候,类的成员函数放在代码区,类的静态成员变量在类定义时就在全局数据区分配内存,因而属于类,而非静态成员变量,是在类的实例化才在栈区或者堆区分配内存。

    类的静态和非静态成员函数都是类在定义时放在内存的代码区中,因而可以说是属于类的,为什么类只能直接调用静态成员函数,而不能调用非静态呢?由于类的非静态成员函数内都隐含了一个指向类对象的指针型参数(this指针),因而只有类对象才能调用。

    存储规则:

    (1) 对于基类,如果有虚函数,那么先存放虚函数表指针,然后存放自己的数据成员;如果没有虚函数,那么直接存放数据成员。 
    (2) 对于单一继承的类对象,先存放父类的数据拷贝(包括虚函数表指针),然后是本类的数据。 
    (3) 虚函数表中,先存放父类的虚函数,再存放子类的虚函数 
    (4) 如果重载了父类的某些虚函数,那么新的虚函数将虚函数表中父类的这些虚函数覆盖。 
    (5) 对于多重继承,先存放第一个父类的数据拷贝,然后存放第二个父类的数据拷贝,依次类推,最后存放自己的数据成员。其中每一个父类拷贝都包含一个虚函数表指针。如果子类重载了某个父类的某个虚函数,那么该将该父类虚函数表的函数覆盖。另外,子类自己的虚函数,存储于第一个父类的虚函数表后边部分。 
    (6) 当对象的虚函数被调用是,编译器去查询对象的虚函数表,找到该函数,然后调用。

  • 相关阅读:
    React-Native 之 GD (二十一)APP 打包
    React-Native 之 GD (十九)TabBarItem 逻辑完善 / 关闭筛选菜单滑动手势 / Navigator 掉帧卡顿问题处理
    React-Native 之 GD (二十)removeClippedSubviews / modal放置的顺序 / Android 加载git图动图 / 去除 Android 中输入框的下划线 / navigationBar
    React-Native 之 GD (十六)首页筛选功能
    React-Native 之 GD (十七)小时风云榜按钮处理
    React-Native 之 GD (十八)监听 TabBarItem 点击与传值实现 点击 Item 进行刷新功能
    SettingsPLSQLDeveloper
    UsageLog4j
    SettingsJDK
    UsageGrideReport++
  • 原文地址:https://www.cnblogs.com/xqn2017/p/8880665.html
Copyright © 2011-2022 走看看