[c++02]类和对象的那些事儿
Posted AIplusX
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[c++02]类和对象的那些事儿相关的知识,希望对你有一定的参考价值。
写在前面
今天呢,主要讨论类和对象之间的一些小关系,主要想证明这几个问题:
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++中class
和struct
有什么区别呢?
看我下面这个测试例程:
下面这个部分是我的测试程序,可以看到我都是在类和结构体里面默认的权限下声明了变量i
和j
,接着进行编译程序,结果编译器报错了,可以从错误里面看到,strcut
里面的默认权限是public
的,class
里面的默认权限是private
的,那么我将程序进行如下修改之后即可通过编译。
以上是关于[c++02]类和对象的那些事儿的主要内容,如果未能解决你的问题,请参考以下文章