C++类的构造函数与析构函数
发布日期:2021-06-03 08:57:46 浏览次数:7 分类:技术文章

本文共 1383 字,大约阅读时间需要 4 分钟。


前言序锦:


很开深也很受教的一次C++学习,今天在图书馆自习,女票说要拿一道C++的题来考考我,说这道题颇有难度,当时的我是很激动的,毕竟作为程序猿来说,就相当于猎人嗅到了食物的味道一样O(∩_∩)O哈哈~,好了话不多说,直接来上题目吧……


正文:


题目:calss A{    A(){ p = this; }    ~A(){ if( p != NULL ) { delete p; p = NULL; }}    A* p; };老铁们,请先不要继续往下看,先来自己品尝一下这道题吧,看你能不能很快OJ她!!!

分析:看了这道题,我们可以朝着两个方向去寻找答案,“构造函数”和“析构函数” 1,构造函数方面: 由于A类中有一个指针A* p; 而构造函数 A(){ p = this; } 也就是说整个指针指向了对象本身,修改为:`A(){ p = NULL; },`在实际的程序中,可以将p指向别的对象,比如结构体中的next对象一样。2,析构函数方面:首先我们来看一下delete p,这一句的操作就是让我们来手动释放掉p对象,而我们又是将其定义在析构函数中,则会出现,对象本来已经通过析构函数被析构掉了,然后此处再次调用delete,此时又会再次去进行析构,而析构的都是同一个对象,这样就会形成无限递归调用析构函数,导致错误。

对就是这么“简单”的一道题,却隐含了这么多的知识,真的是让人感慨呀,当年学的C++感觉全都还给老师了呀,今天真的很感谢女票^-^给我这么个机会来好好脑补一下C++知识,下面我们还是来详细了解一下C++中的

this指针:


我首先看的是构造函数,A(){ p = this;}, 好奇特的构造函数,为什么什么都没有,第一句一开始就出现了一个变量p,还等于this,为了这一点,还专门去看一下this:

C++中的this:
1,对于上面的p = this,意思就是对于p的this就是p的this指针,如果有成员函数调用,比如说a.sum(),则sum函数可以通过隐形形参this来访问a,所以this是被调用对象访问调用他的对象的工具,可以理解为this指向调用他的对象;
2,默认情况下,this的类型是指向类类型非常量的常量指针,所以默认情况下,进行初始化时,我们不能把this绑定到一个常量对象上去。
3,this指针是类成员函数的第一个默认隐含参数,编译器自动维护传递,类编写者不能显示传递;
4,只有在类的非静态成员函数中才可以使用this指针,其他任何函数中都不可以。
3,this指针时刻指向对象,在成员函数的开始执行前构造,在成员的执行结束后清除。


课后习题1:

课后小练习,等你来解决哟^-^,有答案的盆友们可以将你们的答案留言,我们一起学习!

写出类A的定义,通过类的静态成员来记录已经创建的A类的实例(对象)的个数,使得下面的程序int main(){    A *pA = new A[10];    cout<<"There are"<
GetObjCount()<<"objects"<

比较简单但是很有代表性的一道题,欢迎各位伙伴们(^▽^)OJ,可以将你们的结果或者问题留下,我们一起学习……

小编也自己写了个比较简单的结果,大家感兴趣的也可以共同借鉴一下。

课后习题1答案:

转载地址:https://blog.csdn.net/HuaCode/article/details/80028074 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:课后习题1答案
下一篇:Python之去掉字符串空格(strip)

发表评论

最新留言

不错!
[***.144.177.141]2024年04月02日 08时29分55秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章