2014 0416 word清楚项目黑点 输入矩阵 普通继承和虚继承 函数指针实现多态 强弱类型语言
1、word 如何清除项目黑点
选中文字区域,选择开始->样式->全部清除
2、公式编辑器输入矩阵
先输入方括号,接着选择格式->中间对齐,然后点下面红色框里的东西,组后输入数据
3、vptr虚指针 vtbl虚函数表 vbtbl 虚基表
4、普通继承例子
- #include<iostream>
- using namespace std;
- class A
- {
- };
- class B
- {
- char ch;
- virtual void func0() { }
- };
- class C
- {
- char ch1;
- char ch2;
- virtual void func() { }
- virtual void func1() { }
- };
- class D: public A, public C
- {
- char d;
- virtual void func() { }
- virtual void func1() { }
- };
- class E: public B, public C
- {
- int e;
- virtual void func0() { }
- virtual void func1() { }
- };
- int main(void)
- {
- cout<<"A="<<sizeof(A)<<endl; //result=1
- cout<<"B="<<sizeof(B)<<endl; //result=8
- cout<<"C="<<sizeof(C)<<endl; //result=8
- cout<<"D="<<sizeof(D)<<endl; //result=12 注意
- cout<<"E="<<sizeof(E)<<endl; //result=20 注意有两个虚函数指针
- return 0;
- }
sizeof(E)=20,其在内存中的分布:
- class Derived size(20):
- +---
- | +--- (base class B)
- | | {vfptr}
- | | ch
- | +---
- | +--- (base class C)
- | | {vfptr}
- | | ch1 ch2
- | +---
- | e
- +---
- +--- (virtual base CommonBase)
- +---
前面三个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、虚继承与普通继承对比
虚继承代码如下:
- #include<iostream>
- using namespace std;
- class CommonBase
- {
- int co;
- int co1;
- int co2;
- };
- class Base1: virtual public CommonBase//虚继承1处
- {
- public:
- virtual void print1() { }
- virtual void print2() { }
- private:
- int b1;
- };
- class Base2: virtual public CommonBase//虚继承2处
- {
- public:
- virtual void dump1() { }
- virtual void dump2() { }
- private:
- int b2;
- };
- class Derived: public Base1, public Base2
- {
- public:
- void print2() { }
- void dump2() { }
- private:
- int d;
- };
- int main(void)
- {
- cout<<sizeof(CommonBase)<<endl;//4
- cout<<sizeof(Base1)<<endl;//24
- cout<<sizeof(Base2)<<endl;//24
- cout<<sizeof(Derived)<<endl;//40
- return 0;
- }
- sizeof(Derived)=40,其在内存中分布的情况如下:
- class Derived size(40):
- +---
- | +--- (base class Base1)
- | | {vfptr}//4字节
- | | {vbptr}//4字节
- | | b1//4字节
- | +---
- | +--- (base class Base2)
- | | {vfptr}//4字节
- | | {vbptr}//4字节
- | | b2//4字节
- | +---
- | d//4字节
- +---
- +--- (virtual base CommonBase)
- | co//4字节
- | co1//4字节
- | co2//4字节+---
- 如果把上述代码中的1,2两处的virtual删除,那么得到的结果sizeof(Derived)是44>40(commonBase类越大,虚继承的的作用就越大),内存示意图如下:
- class Derived size(44):
- +---
- | +--- (base class Base1)
- | | {vfptr} //4字节
- | | b1+--- //4字节
- +---
- +--- (base class CommonBase)
- | co //4字节
- | co1 //4字节
- | co2 //4字节
- | +---
- | +--- (base class Base2)
- | | {vfptr} //4字节
- | | b2//4字节
- +---
- +--- (base class CommonBase)
- | co//4字节
- | co1 //4字节
- | co2//4字节
- | +---
- | d//4字节
- +---
6、也可以用函数指针实现多态
- #include<iostream>
- using namespace std;
- typedef void (*fVoid)( );//函数指针
- class A
- {
- public:
- static void test()
- {
- printf("hello A\n");
- }
- fVoid print;
- A()
- {
- print = A::test;
- }
- };
- class B : public A
- {
- public:
- static void test()
- {
- printf("hello B\n");
- }
- B()
- {
- print = B::test;
- }
- };
- int main(void)
- {
- A aa;
- aa.print();
- B b;
- A* a = &b;
- a->print();//函数指针实现多态
- return 0;
- }
7、共有继承,子类和父类出现同样名称的变量
8、强类型语言和弱类型语言
2014 0416 word清楚项目黑点 输入矩阵 普通继承和虚继承 函数指针实现多态 强弱类型语言的更多相关文章
- PowerDesigner(二)-项目和框架矩阵(转)
项目和框架矩阵 项目是PowerDesigner 15的新概念,通过项目系统分析/设计人员可以对模型以及各类文档进行分组.项目也可以包含框架矩阵,以表格的形式体现各个模型之间的关系. 项目和框架矩阵解 ...
- MathType可以在Word、PPT中插入矩阵吗
工科学生或者老师在写论文时最头痛的就是编辑公式,因为word自带的公式编辑器往往满足不了专业的公式需求,MathType就很好的解决了这个问题.在进行公式编辑时,难免会遇到输入矩阵的情况,那么怎么输入 ...
- 一个word合并项目的分布式架构设计
一个word合并项目的分布式架构设计 项目背景与问题起源 我们要给一个客户做word生成报告以及报告合并的工作,要合并的报告非常多,而且每个报告也比较大,一个多的报告大概有200页以上.我们用c#操作 ...
- 如何修改word的项目编号
在操作word文档时,有时会遇到word文档中的项目编号不是自己需要的,并造成word项目编号的混乱,如何word中的两级项目编号不统一,为解决会word的项目编号混乱问题,小编将教大家如何修改wor ...
- Matlab 如何输入矩阵
A=[1 2 3;4 5 6;7 8 9],每行之间用分号隔开 也可以用循环控制输入 n=input('请输入矩阵阶数:') for i=1:n for j=1:n a(i,j ...
- C语言之文件操作04——输入矩阵a,b,求乘积c,并打印a,b,c到文件
//文件与数组结合 /* ================================================================= 题目:输入矩阵a,b,求乘积c,并打印a, ...
- 编程计算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列的值. 要求: ...
- 使用LaTeX输入矩阵
当前各种文本编辑器支持的LaTeX数学公式库大多基于KaTeX,或者在Web中用MathJax的比较多,下面给出一种在Web中输入矩阵的例子 $$\left[ \begin{array}{cccc}a ...
- MathType输入矩阵和行列式的技巧
高等代数里,经常要使用到矩阵和行列式,尤其是在写论文时,如何编辑矩阵和行列式呢?比较好的方法就是使用专业的公式编辑器MathType进行编辑,下面就一起来学习具体的编辑技巧. 具体步骤如下: 步骤一 ...
随机推荐
- 密码学之RSA基础
预备数论知识 互质关系 如果两个正整数,除了1以外,没有其他公因子,那么就称这两个数是互质关系 比如:4和7,13和61 欧拉函数 思考:任意给定整数n,在小于等于n的正整数中,有多少个数与n构成互质 ...
- 3.4 redux 异步
在大多数的前端业务场景中,需要和后端产生异步交互,在本节中,将详细讲解 redux 中的异步方案以及一些异步第三方组件,内容有: redux 异步流 redux-thunk redux-promise ...
- 9、TestNG介绍与安装
介绍 TestNG是一个受JUnit和NUnit启发的测试框架,但引入了一些新功能,使其更加强大和易于使用,例如: 注释. 在任意大的线程池中运行你的测试,这些线程池有各种可用的策略(所有方法在他们自 ...
- hibernate5.2.10.Final基本配置
1.在官网去下载,解压后在lib/required目录下的所有jar包都是必要的. 2.为了之后配置方便,建议在eclipse里面安装一个东东,操作步骤是在eclipse->Help->I ...
- Valgrind学习
Valgrind与其他DBI(Pin, DynamoRIO)的区别 我们需要了解DBI的几个 D&R Disassemble-and-Resynthesise 反汇编后重新组装 Valgrin ...
- Linux初始化的汇编代码
1. 内核文件布局 首先看一下arch/x86/boot/Setup.ld文件,它定义了链接后的内核文件布局. 1: /* 2: * setup.ld 3: * 4: * Linker script ...
- 解决 html5 input type='number' 类型可以输入e
当给 input 设置类型为 number 时,比如,我想限制,只能输入 0-9 的正整数,正则表达式如下: /^[-]?$/ // 匹配 0-9 的整数且只匹配 0 次或 1 次 用正则测试,小数点 ...
- 什么是NVMe硬盘?
本文摘自:https://zhidao.baidu.com/question/590890784.html NVMe硬盘指的是非易失性内存主机控制器接口规范(Non-Volatile Memory e ...
- Netty 源码学习——客户端流程分析
Netty 源码学习--客户端流程分析 友情提醒: 需要观看者具备一些 NIO 的知识,否则看起来有的地方可能会不明白. 使用版本依赖 <dependency> <groupId&g ...
- 关于Web中的图标使用问题
挺懒的,这里做个记录. Web中的图标使用问题 : https://github.com/amfe/article/issues/2