c++类的内存存储

所有函数都存放在代码区,静态函数也不例外

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Class A
{
Public:
Int a;
Int b;
Int sun(int a1,int b1)
{
Result a1+b1;
}
vritual int max(int a1,int b1)
};
Class A1 Public A
{
Public:
Int c;
int xianjian(int a1,int b1)//2 个数相减 ;
{ result a1-b1;}
vritual int max(int a1,int b1)
};

new 一个A一个A1
共用sun函数地址,对象分配的空间中不含函数的空间,只有虚函数的地址表-继承的变量,自己的变量,因为虚函数每层都不一样所以每层都有各自的虚函数表,
表内是各个虚函数的地址,先父后自己,当自己继承了父的虚但仍是虚是父的虚地址改为自己的,若新加虚函数就接着父往后排
多重继承时仍只有一个虚函数表,内存中的对象一层一层表示,
但c++支持同时继承多个类,此时有多个虚地址表

面向对象编程语言中的多重继承指的是一个类可以同时继承多个父类的行为和特征功能。单一继承是指:一个子类只继承一个父类。
多重继承指代可以导致某些令人混淆的情况,所以关于它的好处与风险之间孰轻孰重常常受人争论。Java使用了一个折衷的办法:Java允许一个类别继承自多于一个父接口(可以指定某一个类别,它继承了所有父类的类型,并必须拥有所有父类别接口的外部可见方法的具体实现,并允许编译器强制以上要求),但只可以从一个父类别继承实现(方法与数据)。微软的.NET编程语言,例如C#和Visual Basic .NET和REAL Software的REALbasic也使用了这种类接口的做法。