c++学习之析构函数和const总结,你真的掌握了吗?
3、搞清楚成员函数和成员变量是否都是隶属于具体对象
从面向对象的角度看,对象由属性(成员变量)和方法(成员函数)构成
从程序运行的角度来看,对象由数据和函数构成,而数据可以位于栈、堆、全局数据区;而函数只能位于代码段,而代码段是只读的,在程序运行过程中是不可以被改变的,而对于数据来说,他们处于栈、堆,是可以动态的创建和动态的删除;
4、this指针
不知大家是否注意到在拷贝构造函数里面的这条语句,参数里面是引用,那么t也相当于是一个对象,所以会有t.mi这样的写法,这里要明白:
Test(const Test& t) { mi = t.mi; }
所以这里我就引出了this指针,他表示方法中的隐藏参数代指当前对象,为了说明这个,下面我们来看一个代码示例:
#include <stdio.h>
class Test{ int mi;public: int mj; Test(int i); Test(const Test& t); int getMi(); void print();};
Test::Test(int i){ mi = i;}
Test::Test(const Test& t){ mi = t.mi;} int Test::getMi(){ return mi;}
void Test::print(){ printf("this = %p", this);}
int main(){ Test t1(1); Test t2(2); Test t3(3); printf("t1.getMi() = %d", t1.getMi()); printf("&t1 = %p", &t1); t1.print(); printf("t2.getMi() = %d", t2.getMi()); printf("&t2 = %p", &t2); t2.print(); printf("t3.getMi() = %d", t3.getMi()); printf("&t3 = %p", &t3); t3.print(); return 0;}
输出结果:
root@txp-virtual-machine:/home/txp# ./a.outt1.getMi() = 1&t1 = 0x7ffec3f5e750this = 0x7ffec3f5e750t2.getMi() = 2&t2 = 0x7ffec3f5e758this = 0x7ffec3f5e758t3.getMi() = 3&t3 = 0x7ffec3f5e760this = 0x7ffec3f5e760
分析:
在类的成员函数当中,有一个隐含的参数,就是我们刚才说的this指针,它的值就是调用这个函数所对应的对象的地址,说白了,this指针指向当前对象。
每一个对象都有一套自己的成员变量,对象和对象之间的成员变量是独立的、不同的;但是每一个对象都共享一个类的成员函数
三、总结:
对象的析构顺序与构造顺序相反
const 关键字能够修饰对象,得到只读对象
只读对象只能调用 const 成员函数
所有对象共享类的成员函数
隐藏的 this 指针用于表示当前对象
好了,今天的分享就到这里,如果文章中有错误或者不理解的地方,可以交流活动,一起进步。我是txp,下期见!
图片新闻
最新活动更多
-
11月28日立即报名>>> 2024工程师系列—工业电子技术在线会议
-
11月29日立即预约>> 【上海线下】设计,易如反掌—Creo 11发布巡展
-
11月30日立即试用>> 【有奖试用】爱德克IDEC-九大王牌安全产品
-
即日-12.5立即观看>> 松下新能源中国布局:锂一次电池新品介绍
-
12月19日立即报名>> 【线下会议】OFweek 2024(第九届)物联网产业大会
-
即日-12.26火热报名中>> OFweek2024中国智造CIO在线峰会
发表评论
请输入评论内容...
请输入评论/评论长度6~500个字
暂无评论
暂无评论