C/C++ 中struct的区别
C中的struct是没有权限设置的。
C++中struct增加了访问权限,且可以和类一样有成员函数。
C++中的struct等同于class,只是class默认成员权限是private,而struct默认成员权限是public。且class的默认继承为私有继承,struct的默认继承为公有继承。
C++中引用和指针有什么不同?指针加上什么限制等于引用?
引用不是一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。引用一经确定就不能修改。
指针是一个变量,需要在内存中分配空间,此空间中存储所指对象的地址。由于指针是一个普通变量,所以其值还可以通过重新赋值来改变。
把指针定义为const后,其值就不能改变了,功能和引用类似,但有本质的区别。
继承与多态
覆盖(override)是指子类重新定义父类的虚函数的做法。
重载(overload)是指允许存在多个同名函数,而这些函数的参数表不同。他们的地址在编译期就绑定了(早绑定),重载与多态无关。
继承的作用是代码重用。多态为了实现接口重用
虚函数
一个类存在虚函数,那么编译器就会为这个类生成一个虚表,在虚表里存放的是这个类所有虚函数的地址。
当生成类对象的时候,编译器会自动的将类对象的前四个字节设置为虚表的地址,而这四个字节就可以看作是一个指向虚表的指针。
虚表里依次存放的是虚函数的地址,每个虚函数的地址占4个字节。
struct 的大小
struct A
{
A(){}
~A(){}
int m1;
int m2;
};
struct B
{
B(){}
~B(){}
int m1;
char m2;
static int m3;
};
struct C
{
C(){}
virtual ~C(){}
int m1;
short m2;
};
8 8 12