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进行编辑,下面就一起来学习具体的编辑技巧. 具体步骤如下: 步骤一 ...
随机推荐
- Vue2.0源码思维导图-------------Vue 构造函数、原型、静态属性和方法
已经用vue有一段时间了,最近花一些时间去阅读Vue源码,看源码的同时便于理解,会用工具画下结构图. 今天把最近看到总结的结构图分享出来.希望可以帮助和其他同学一起进步.当然里边可能存在一些疏漏的,或 ...
- 学 Win32 汇编[22] - 逻辑运算指令: AND、OR、XOR、NOT、TEST
AND: 逻辑与 ;该指令会置 CF=OF=; 其结果影响 SF.ZF.PF ;指令格式: AND r/m, r/m/i ; Test22_1.asm - 使用 AND 运算将一个数的第二.四位清零 ...
- java.io.IOException: Could not find resource SqlMapConfig.xml
java.io.IOException: Could not find resource SqlMapConfig.xml 创建mybatis工程时遇到的问题 问题的来源:当我们在项目中和src同级的 ...
- WPF 3D
参考MSDN内容:http://msdn.microsoft.com/zh-cn/library/ms747437(v=vs.110).aspx 概述 WPF使用Viewport3D元素,将三维场景显 ...
- GIT 学习第二天 (二)
工作区和暂存区 工作区: 就是你在电脑里能看到的目录,比如:webgit 文件夹 就是一个工作区 版本库: 工作区有一个隐藏目录 .git ,这个不算工作区,而是Git的版本库 Git的版本库里存了很 ...
- 通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷
通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下: 步骤1:通过MyEclipse中的window->show View->ot ...
- Editor REST Client
Editor REST Client 制作一个http请求 请求行 GET https://example.com/comments/1 HTTP/1.1 POST https://example.c ...
- CSS中block,inline和block-inline的区别(转载)
http://www.cnblogs.com/KeithWang/p/3139517.html 总体概念 block和inline这两个概念是简略的说法,完整确切的说应该是 block-level e ...
- JUC源码分析-集合篇:并发类容器介绍
JUC源码分析-集合篇:并发类容器介绍 同步类容器是 线程安全 的,如 Vector.HashTable 等容器的同步功能都是由 Collections.synchronizedMap 等工厂方法去创 ...
- Spring Boot配置随机数
Spring Boot支持在系统加载的时候配置随机数. 添加config/random.properties文件,添加以下内容: #随机32位MD5字符串 user.random.secret=${r ...