写在前面

今天呢,主要讨论类和对象之间的一些小关系,主要想证明这几个问题:

1:成员变量分别在类的每一个对象里面,且对象里面只有成员变量(类内不含虚函数的情况下);

2:对象信息是通过this指针传递给类的;

3:C++里面class和struct的区别;

正文

首先我们来验证一下成员变量是在类的每一个对象里的这件事,要证明这件事呢,我们首先来看看用同一个类实例化出不同的对象,这些成员变量的大小是否相同。

我实例化了A类得到了a,a2这2个对象,然后查看其大小,发现2个对象大小都是一个int的大小,这说明了对象里面只存了一个int大小的数据,刚好成员变量i就是int类型的,于是我猜测对象里面存的就是成员变量。

于是我通过使用指针偏移的方式通过类的对象获取了成员变量,为了保证全面性,我还给A类添加了private的成员变量j,具体看下面的操作实现:


我在构造函数的初始化列表里面分别对i, j进行了初始化,分别是666和777,在最终的输出里正确显示了数值,那就说明了,在不包含虚函数的类中,类所实例化的对象就是只保存了成员变量。

接下来我们验证下一个问题,this指针是用来告诉类是哪个对象在调用函数,而且this指针就是对象的地址,我们来看下面这个测试程序:

程序的输出如下所示:

可以看到,类的构造函数通过this指针(系统分配给对象的内存地址),也就是系统分配的内存构造了一个对象,那么在接下来调用类的函数时,也可以看到隐式传递的this指针的内容就是对象的地址,这也就意味着,类是根据对象传回来的地址,也就是this指针知道调用函数的是哪个对象。

最后一个问题就是在c++中classstruct有什么区别呢?

看我下面这个测试例程:

下面这个部分是我的测试程序,可以看到我都是在类和结构体里面默认的权限下声明了变量ij,接着进行编译程序,结果编译器报错了,可以从错误里面看到,strcut里面的默认权限是public的,class里面的默认权限是private的,那么我将程序进行如下修改之后即可通过编译。