1、word 如何清除项目黑点

选中文字区域,选择开始->样式->全部清除

2、公式编辑器输入矩阵

先输入方括号,接着选择格式->中间对齐,然后点下面红色框里的东西,组后输入数据

 

3、vptr虚指针    vtbl虚函数表   vbtbl  虚基表

4、普通继承例子

  1. #include<iostream>
  2. using namespace std;
  3. class A
  4. {
  5. };
  6.  
  7. class B
  8. {
  9. char ch;
  10. virtual void func0() { }
  11. };
  12.  
  13. class C
  14. {
  15. char ch1;
  16. char ch2;
  17. virtual void func() { }
  18. virtual void func1() { }
  19. };
  20.  
  21. class D: public A, public C
  22. {
  23. char d;
  24. virtual void func() { }
  25. virtual void func1() { }
  26. };
  27.  
  28. class E: public B, public C
  29. {
  30. int e;
  31. virtual void func0() { }
  32. virtual void func1() { }
  33. };
  34.  
  35. int main(void)
  36. {
  37. cout<<"A="<<sizeof(A)<<endl; //result=1
  38. cout<<"B="<<sizeof(B)<<endl; //result=8
  39. cout<<"C="<<sizeof(C)<<endl; //result=8
  40. cout<<"D="<<sizeof(D)<<endl; //result=12 注意
  41. cout<<"E="<<sizeof(E)<<endl; //result=20 注意有两个虚函数指针
  42. return 0;
  43. }

sizeof(E)=20,其在内存中的分布:

  1. class Derived size(20):
  2. +---
  3. | +--- (base class B)
  4. | | {vfptr}
  5. | | ch
  6. | +---
  7. | +--- (base class C)
  8. | | {vfptr}
  9. | | ch1 ch2
  10. | +---
  11. | e
  12. +---
  13. +--- (virtual base CommonBase)
  14. +---
  1.  

前面三个A、B、C类的内存占用空间大小就不需要解释了,注意一下内存对齐就可以理解了。

求sizeof(D)的时候,需要明白,首先VPTR指向的虚函数表中保存的是类D中的两个虚函数的地址,然后存放基类C中的两个数据成员ch1、ch2,注意内存对齐,然后存放数据成员d,这样4+4+4=12。

求sizeof(E)的时候,首先是类B的虚函数地址,然后类B中的数据成员,再然后是类C的虚函数地址,然后类C中的数据成员,最后是类E中的数据成员e,同样注意内存对齐,这样4+4+4+4+4=20。

5、虚继承与普通继承对比

虚继承代码如下:

  1. #include<iostream>
  2. using namespace std;
  3. class CommonBase
  4. {
  5. int co;
  1. int co1;
  1. int co2;
  2. };
  3.  
  4. class Base1: virtual public CommonBase//虚继承1处
  5. {
  6. public:
  7. virtual void print1() { }
  8. virtual void print2() { }
  9. private:
  10. int b1;
  11. };
  12.  
  13. class Base2: virtual public CommonBase//虚继承2处
  14. {
  15. public:
  16. virtual void dump1() { }
  17. virtual void dump2() { }
  18. private:
  19. int b2;
  20. };
  21.  
  22. class Derived: public Base1, public Base2
  23. {
  24. public:
  25. void print2() { }
  26. void dump2() { }
  27. private:
  28. int d;
  29. };
  30.  
  31. int main(void)
  32. {
  33. cout<<sizeof(CommonBase)<<endl;//4
  34. cout<<sizeof(Base1)<<endl;//24
  35. cout<<sizeof(Base2)<<endl;//24
  36. cout<<sizeof(Derived)<<endl;//40
  37. return 0;
  38. }
  • sizeof(Derived)=40,其在内存中分布的情况如下:
  1. class Derived size(40):
  2. +---
  3. | +--- (base class Base1)
  4. | | {vfptr}//4字节
  5. | | {vbptr}//4字节
  6. | | b1//4字节
  7. | +---
  8. | +--- (base class Base2)
  9. | | {vfptr}//4字节
  10. | | {vbptr}//4字节
  11. | | b2//4字节
  12. | +---
  13. | d//4字节
  14. +---
  15. +--- (virtual base CommonBase)
  16. | co//4字节
  1. | co1//4字节
  1. | co2//4字节+---
  • 如果把上述代码中的1,2两处的virtual删除,那么得到的结果sizeof(Derived)是44>40(commonBase类越大,虚继承的的作用就越大),内存示意图如下:
  1. class Derived size(44):
  2. +---
  3. | +--- (base class Base1)
  4. | | {vfptr} //4字节
  5. | | b1+--- //4字节
  1. +---
  1. +--- (base class CommonBase)
  1. | co //4字节
  2. | co1 //4字节
  1. | co2 //4字节
  1. | +---
  2. | +--- (base class Base2)
  3. | | {vfptr} //4字节
  4. | | b2//4字节
  1. +---
  1. +--- (base class CommonBase)
  1. | co//4字节
  1. | co1 //4字节
  1. | co2//4字节
  1. | +---
  2. | d//4字节
  3. +---

6、也可以用函数指针实现多态

  1. #include<iostream>
  2. using namespace std;
  3.  
  4. typedef void (*fVoid)( );//函数指针
  5.  
  6. class A
  7. {
  8. public:
  9. static void test()
  10. {
  11. printf("hello A\n");
  12. }
  13.  
  14. fVoid print;
  15.  
  16. A()
  17. {
  18. print = A::test;
  19. }
  20. };
  21.  
  22. class B : public A
  23. {
  24. public:
  25. static void test()
  26. {
  27. printf("hello B\n");
  28. }
  29.  
  30. B()
  31. {
  32. print = B::test;
  33. }
  34. };
  35.  
  36. int main(void)
  37. {
  38. A aa;
  39. aa.print();
  40.  
  41. B b;
  42. A* a = &b;
  1. a->print();//函数指针实现多态
  2.  
  3. return 0;
  4. }

7、共有继承,子类和父类出现同样名称的变量

8、强类型语言和弱类型语言

2014 0416 word清楚项目黑点 输入矩阵 普通继承和虚继承 函数指针实现多态 强弱类型语言的更多相关文章

  1. PowerDesigner(二)-项目和框架矩阵(转)

    项目和框架矩阵 项目是PowerDesigner 15的新概念,通过项目系统分析/设计人员可以对模型以及各类文档进行分组.项目也可以包含框架矩阵,以表格的形式体现各个模型之间的关系. 项目和框架矩阵解 ...

  2. MathType可以在Word、PPT中插入矩阵吗

    工科学生或者老师在写论文时最头痛的就是编辑公式,因为word自带的公式编辑器往往满足不了专业的公式需求,MathType就很好的解决了这个问题.在进行公式编辑时,难免会遇到输入矩阵的情况,那么怎么输入 ...

  3. 一个word合并项目的分布式架构设计

    一个word合并项目的分布式架构设计 项目背景与问题起源 我们要给一个客户做word生成报告以及报告合并的工作,要合并的报告非常多,而且每个报告也比较大,一个多的报告大概有200页以上.我们用c#操作 ...

  4. 如何修改word的项目编号

    在操作word文档时,有时会遇到word文档中的项目编号不是自己需要的,并造成word项目编号的混乱,如何word中的两级项目编号不统一,为解决会word的项目编号混乱问题,小编将教大家如何修改wor ...

  5. Matlab 如何输入矩阵

    A=[1 2 3;4 5 6;7 8 9],每行之间用分号隔开 也可以用循环控制输入 n=input('请输入矩阵阶数:') for i=1:n     for j=1:n         a(i,j ...

  6. C语言之文件操作04——输入矩阵a,b,求乘积c,并打印a,b,c到文件

    //文件与数组结合 /* ================================================================= 题目:输入矩阵a,b,求乘积c,并打印a, ...

  7. 编程计算2×3阶矩阵A和3×2阶矩阵B之积C。 矩阵相乘的基本方法是: 矩阵A的第i行的所有元素同矩阵B第j列的元素对应相乘, 并把相乘的结果相加,最终得到的值就是矩阵C的第i行第j列的值。 要求: (1)从键盘分别输入矩阵A和B, 输出乘积矩阵C (2) **输入提示信息为: 输入矩阵A之前提示:"Input 2*3 matrix a:\n" 输入矩阵B之前提示

    编程计算2×3阶矩阵A和3×2阶矩阵B之积C. 矩阵相乘的基本方法是: 矩阵A的第i行的所有元素同矩阵B第j列的元素对应相乘, 并把相乘的结果相加,最终得到的值就是矩阵C的第i行第j列的值. 要求: ...

  8. 使用LaTeX输入矩阵

    当前各种文本编辑器支持的LaTeX数学公式库大多基于KaTeX,或者在Web中用MathJax的比较多,下面给出一种在Web中输入矩阵的例子 $$\left[ \begin{array}{cccc}a ...

  9. MathType输入矩阵和行列式的技巧

    高等代数里,经常要使用到矩阵和行列式,尤其是在写论文时,如何编辑矩阵和行列式呢?比较好的方法就是使用专业的公式编辑器MathType进行编辑,下面就一起来学习具体的编辑技巧. 具体步骤如下: 步骤一 ...

随机推荐

  1. 密码学之RSA基础

    预备数论知识 互质关系 如果两个正整数,除了1以外,没有其他公因子,那么就称这两个数是互质关系 比如:4和7,13和61 欧拉函数 思考:任意给定整数n,在小于等于n的正整数中,有多少个数与n构成互质 ...

  2. 3.4 redux 异步

    在大多数的前端业务场景中,需要和后端产生异步交互,在本节中,将详细讲解 redux 中的异步方案以及一些异步第三方组件,内容有: redux 异步流 redux-thunk redux-promise ...

  3. 9、TestNG介绍与安装

    介绍 TestNG是一个受JUnit和NUnit启发的测试框架,但引入了一些新功能,使其更加强大和易于使用,例如: 注释. 在任意大的线程池中运行你的测试,这些线程池有各种可用的策略(所有方法在他们自 ...

  4. hibernate5.2.10.Final基本配置

    1.在官网去下载,解压后在lib/required目录下的所有jar包都是必要的. 2.为了之后配置方便,建议在eclipse里面安装一个东东,操作步骤是在eclipse->Help->I ...

  5. Valgrind学习

    Valgrind与其他DBI(Pin, DynamoRIO)的区别 我们需要了解DBI的几个 D&R Disassemble-and-Resynthesise 反汇编后重新组装 Valgrin ...

  6. Linux初始化的汇编代码

    1. 内核文件布局 首先看一下arch/x86/boot/Setup.ld文件,它定义了链接后的内核文件布局. 1: /* 2: * setup.ld 3: * 4: * Linker script ...

  7. 解决 html5 input type='number' 类型可以输入e

    当给 input 设置类型为 number 时,比如,我想限制,只能输入 0-9 的正整数,正则表达式如下: /^[-]?$/ // 匹配 0-9 的整数且只匹配 0 次或 1 次 用正则测试,小数点 ...

  8. 什么是NVMe硬盘?

    本文摘自:https://zhidao.baidu.com/question/590890784.html NVMe硬盘指的是非易失性内存主机控制器接口规范(Non-Volatile Memory e ...

  9. Netty 源码学习——客户端流程分析

    Netty 源码学习--客户端流程分析 友情提醒: 需要观看者具备一些 NIO 的知识,否则看起来有的地方可能会不明白. 使用版本依赖 <dependency> <groupId&g ...

  10. 关于Web中的图标使用问题

    挺懒的,这里做个记录. Web中的图标使用问题 : https://github.com/amfe/article/issues/2