类与对象(this指针与默认成员函数之构造函数)

上节课我们说了类与对象,让我们简单的知道了C++中什么是类,但是大家想过一个问题吗?我们上篇内容说的是在计算类的大小的时候,我们不会计算他的成员函数,但是,如果不计算他的成员函数的话,它在内存中是怎么放置的呢?为什么回不计算成员函数的大小呢?其实他在内存当中没有和成员变量放在一起的,而是放在了公共代码区,如下图:

画的可能是不太标准,但是大概意思就是这样的,所以,这里就引出来了一个问题,那么,如果我是下面的这种代码呢?

 

 因为他的成员函数在公共区,那么我们调用他的时候,我们怎么知道的到底是谁调用的谁呢?所以这里就出现了一个this指针,它其实是隐藏起来的,当对象调用成员函数的时候,就会吧对象的地址传给他,这样理解的话,this指针其实本质是成员函数的一个形参,是个隐藏的参数。看下面的代码:

其实就是转换成了这个样子,注,这个样子编译是不能通过的,这个只是我们展开的样子,所以,我们平时写代码的时候的这个指针是被隐藏了的,所以这里我们要知道,还有要注意的一个点是,因为塔川的是对象的地址,所以this指针的地址是不能变的,所以,它的类型应该是*const,这个为什么我想大家应该都是知道的,C的内容我们就不在这复习了。还有就是只有非静态的成员函数才有this指针。

 构造函数:

大家一听这个函数的名字,不知道有没有一种感觉,就是这个函数的功能是构造一个什么东西的,其实并不是这样的,构造函数的功能是初始化对象的成员变量,也就是实例化一个对象之后,它会自动调用这个函数,这个函数的特点是,他不用写返回值,函数名要与类的名字一样,上面代码已写,可以对照的看一下。这个很简单,我想给大家说的是,如果我们在实现一个类的时候,如果你没有写这个构造函数的话,编译器会默生成一个,而默认生成的这个构造函数是没有参数的,它对内置类型是不做处理的,对自定义类型是会返回去调用这个自定义类型的构造函数。而有的编译器就算不写这个构造函数,默认生成的这个构造函数也是会初始化的,这个是因为编译器的不同,有的会,有的不会,但是要记住一点,这里其实默认生成的构造函数其实是不初始化内置类型的,就算是他把内置类型给初始化了,但是你要知道的是,这是编译器初始化的,其实真正的是不初始化的。然后就是默认生成的构造函数有三种:1.我们自己没有写,自动生成的  2.我们自己写的,全缺省的 3.我们自己写的,没有参数的

以上就是这篇文章的内容,大家如果有所收获的话就留下你的赞吧!!!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值