当前位置: 首页 > news >正文

咸阳 网站建设莱芜雪野湖天气预报

咸阳 网站建设,莱芜雪野湖天气预报,厦门模板网站,网站建设做网站4.3 C对象模型和this指针 4.3.1 成员变量和成员函数分开存储 在C中#xff0c;类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 #include iostreamclass Person { public:Person() {mA 0;} //非静态成员变量占对象空间int mA;//静态成员变量…4.3 C对象模型和this指针 4.3.1 成员变量和成员函数分开存储 在C中类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象上 #include iostreamclass Person { public:Person() {mA 0;} //非静态成员变量占对象空间int mA;//静态成员变量不占对象空间static int mB;//函数也不占对象空间所有函数共享一个函数实例void func() {std::cout mA: this-mA std::endl;} //静态成员函数也不占对象空间static void sfunc() {} };int main() {//实例化一个对象为p1Person p1;std::cout Person:sizeof(Person) std::endl;std::cout p1: sizeof(p1) std::endl;return 0; }运行结果如下 4.3.2 this指针概念 通过4.3.1我们知道在C中成员变量和成员函数是分开存储的 每一个非静态成员函数只会诞生一份函数实例也就是说多个同类型的对象会共用一块代码 那么问题是这一块代码是如何区分那个对象调用自己的呢 c通过提供特殊的对象指针this指针解决上述问题。 this指针指向被调用的成员函数所属的对象 this指针是隐含每一个非静态成员函数内的一种指针 this指针不需要定义直接使用即可 this指针是一个常量指针可以看做const type * this 指针的指向不能修改this NULL这样是错的。 this指针的用途 当形参和成员变量同名时可用this指针来区分 在类的非静态成员函数中返回对象本身可使用return *this #include iostreamclass Person { public:Person(int age) {//1 使用this区分形参和成员变量this-age age;} Person PersonAddPerson(Person p) {this-age p.age;//2 返回对象本身,this为指针所以加上*return *this;} //定义一个成员变量属性为publicint age; };void test01() { //实例化一个对象为p1,会调用有参构造函数Person p1(10);//打印p1.age的结果std::cout p1.age: p1.age std::endl;//实例化一个对象为p2Person p2(12);//p2.PersonAddPerson(p1)这是使用p2对象调用成员函数PersonAddPerson(p1)//成员函数返回值是对象p2然后再次调用成员函数p2.PersonAddPerson(p1).PersonAddPerson(p1).PersonAddPerson(p1);std::cout p2.age: p2.age std::endl;}int main() {test01();return 0; }运行结果如下 #include iostreamclass MyClass { public:void printAddress() {std::cout Address of the current object: this std::endl;}void modifyObject() {// 下面的语句是非法的会导致编译错误// this nullptr; // Error: assignment of read-only parameter this// 修改成员变量是合法的data 42;}private:int data; };int main() {MyClass obj;// 调用成员函数显示对象地址obj.printAddress();// 调用修改对象的函数obj.modifyObject();return 0; } 4.3.3 空指针访问成员函数 C中空指针也是可以调用成员函数的但是也要注意有没有用到this指针 如果用到this指针需要加以判断保证代码的健壮性 示例 #include iostreamclass Person { public:void ShowClassName() {std::cout Person类 std::endl;} void ShowPerson() {if(this NULL)return ;std::cout age: age std::endl;} int age;};void test01() { //创建一个对象指针Person* p1 NULL;//使用对象指针调用成员函数p1-ShowClassName();//使用对象指针调用成员函数成员函数使用了this指针空对象指针就使用不了 p1-ShowPerson();}int main() {test01();return 0; }执行结果如下 成员函数去掉this判断部分 #include iostreamclass Person { public:void ShowClassName() {std::cout Person类 std::endl;} void ShowPerson() {/*if(this NULL)return ;*/std::cout age: age std::endl;} int age;};void test01() { //创建一个对象指针Person* p1 NULL;//使用对象指针调用成员函数p1-ShowClassName();//使用对象指针调用成员函数成员函数使用了this指针空对象指针就使用不了p1-ShowPerson();}int main() {test01();return 0; }再次编译执行结果如下 对于上面出现的错误做一个解释 代码中如果去掉了 if(this NULL) 的检查并试图在一个空指针上调用 ShowPerson 函数程序会尝试通过一个空指针来访问 age 成员变量。对空指针进行解引用是一种未定义的行为通常会导致段错误。 具体步骤如下 声明一个空指针例如 Person* nullPointer nullptr;。尝试在这个空指针上调用一个成员函数nullPointer-ShowPerson();。在 ShowPerson 函数内部尝试通过 this-age 访问 age 成员变量。由于 this 是一个空指针尝试访问 this-age 会导致段错误。 4.3.4 const修饰成员函数 常函数 成员函数后加const后我们称为这个函数为常函数 常函数内不可以修改成员属性 成员属性声明时加关键字mutable后在常函数中依然可以修改 常对象 声明对象前加const称该对象为常对象 常对象只能调用常函数 const修饰成员函数 #include iostreamclass Person { public://默认构造函数Person() {p_a 0;p_b 0;} void ShowPerson() {//隐含在每个成员函数内部都有一个this指针,this是一个常量指针//this NULL; 常量指针的内容不能修改this-p_a 10;//对于常量指针的指向的内容可以修改 } void ShowPerson2() const {//隐含在每个成员函数内部都有一个this指针,this是一个常量指针//this NULL; 常量指针的内容不能修改//const修饰成员函数表示指针指向的内存空间的数据不能修改除了mutable修饰的变量//this-p_a 20;//p_b变量被mutable修饰可以修改this-p_b 100;//常函数中变量不能修改//p_a 12;//使用mutable修改的变量可以修改p_b 22; } public:int p_a;mutable int p_b;};void test01() { //创建一个对象会调用默认构造函数Person p1;//查看变量p_a和p_b的值,调用构造函数后值都为0std::cout p_a: p1.p_a p_b: p1.p_b std::endl;//使用对象调用成员函数p1.ShowPerson();//查看此时变量p_a和p_b的值,p_a会变为10,p_b为0std::cout p_a: p1.p_a p_b: p1.p_b std::endl;//使用对象调用常量成员函数p1.ShowPerson2();//查看此时变量p_a和p_b的值,p_a会为10,p_b为22std::cout p_a: p1.p_a p_b: p1.p_b std::endl;}int main() {test01();return 0; }运行结果如下图 const修饰对象 #include iostreamclass Person { public://默认构造函数Person() {p_a 0;p_b 0;} void ShowPerson() {//隐含在每个成员函数内部都有一个this指针,this是一个常量指针//this NULL; 常量指针的内容不能修改this-p_a 10;//对于常量指针的指向的内容可以修改 } void ShowPerson2() const {//隐含在每个成员函数内部都有一个this指针,this是一个常量指针//this NULL; 常量指针的内容不能修改//const修饰成员函数表示指针指向的内存空间的数据不能修改除了mutable修饰的变量//this-p_a 20;//p_b变量被mutable修饰可以修改this-p_b 100;//常函数中变量不能修改//p_a 12;//使用mutable修改的变量可以修改p_b 22; } public:int p_a;mutable int p_b;};void test01() { //创建一个常量对象p1会调用默认构造函数const Person p1;//1 常量对象不能修改成员变量的值//p1.p_a 33;//可以修改被mutable修饰的变量值p1.p_b 11;//可以访问成员变量的值std::cout p_a: p1.p_a std::endl;std::cout p_b: p1.p_b std::endl;//2 常量对象访问成员函数只能访问常函数//ShowPerson是非常函数常量对象不能访问//p1.ShowPerson();//访问常函数p1.ShowPerson2();std::cout p_a: p1.p_a p_b: p1.p_b std::endl;}int main() {test01();return 0; }运行结果如下
文章转载自:
http://www.morning.fnnkl.cn.gov.cn.fnnkl.cn
http://www.morning.bzgpj.cn.gov.cn.bzgpj.cn
http://www.morning.jhrtq.cn.gov.cn.jhrtq.cn
http://www.morning.pqcbx.cn.gov.cn.pqcbx.cn
http://www.morning.tlyms.cn.gov.cn.tlyms.cn
http://www.morning.plcyq.cn.gov.cn.plcyq.cn
http://www.morning.kmwsz.cn.gov.cn.kmwsz.cn
http://www.morning.kaylyea.com.gov.cn.kaylyea.com
http://www.morning.xhlpn.cn.gov.cn.xhlpn.cn
http://www.morning.mdwb.cn.gov.cn.mdwb.cn
http://www.morning.dlrsjc.com.gov.cn.dlrsjc.com
http://www.morning.ndnhf.cn.gov.cn.ndnhf.cn
http://www.morning.ydxg.cn.gov.cn.ydxg.cn
http://www.morning.lrmts.cn.gov.cn.lrmts.cn
http://www.morning.ghslr.cn.gov.cn.ghslr.cn
http://www.morning.kfbth.cn.gov.cn.kfbth.cn
http://www.morning.cykqb.cn.gov.cn.cykqb.cn
http://www.morning.nqxdg.cn.gov.cn.nqxdg.cn
http://www.morning.qcygd.cn.gov.cn.qcygd.cn
http://www.morning.wnbpm.cn.gov.cn.wnbpm.cn
http://www.morning.lynkz.cn.gov.cn.lynkz.cn
http://www.morning.mgfnt.cn.gov.cn.mgfnt.cn
http://www.morning.qsswb.cn.gov.cn.qsswb.cn
http://www.morning.bqdpy.cn.gov.cn.bqdpy.cn
http://www.morning.rxhsm.cn.gov.cn.rxhsm.cn
http://www.morning.fnpmf.cn.gov.cn.fnpmf.cn
http://www.morning.jqzns.cn.gov.cn.jqzns.cn
http://www.morning.ddqdl.cn.gov.cn.ddqdl.cn
http://www.morning.xphcg.cn.gov.cn.xphcg.cn
http://www.morning.hqwtm.cn.gov.cn.hqwtm.cn
http://www.morning.ttnfc.cn.gov.cn.ttnfc.cn
http://www.morning.gxqpm.cn.gov.cn.gxqpm.cn
http://www.morning.qxkcx.cn.gov.cn.qxkcx.cn
http://www.morning.qwnqt.cn.gov.cn.qwnqt.cn
http://www.morning.gpfuxiu.cn.gov.cn.gpfuxiu.cn
http://www.morning.dgwrz.cn.gov.cn.dgwrz.cn
http://www.morning.tnmmp.cn.gov.cn.tnmmp.cn
http://www.morning.nfzzf.cn.gov.cn.nfzzf.cn
http://www.morning.dfbeer.com.gov.cn.dfbeer.com
http://www.morning.prgdy.cn.gov.cn.prgdy.cn
http://www.morning.xxrwp.cn.gov.cn.xxrwp.cn
http://www.morning.nbsfb.cn.gov.cn.nbsfb.cn
http://www.morning.trjr.cn.gov.cn.trjr.cn
http://www.morning.mftzm.cn.gov.cn.mftzm.cn
http://www.morning.nsyzm.cn.gov.cn.nsyzm.cn
http://www.morning.qrgfw.cn.gov.cn.qrgfw.cn
http://www.morning.sbdqy.cn.gov.cn.sbdqy.cn
http://www.morning.wqhlj.cn.gov.cn.wqhlj.cn
http://www.morning.bsrqy.cn.gov.cn.bsrqy.cn
http://www.morning.nxstj.cn.gov.cn.nxstj.cn
http://www.morning.pznnt.cn.gov.cn.pznnt.cn
http://www.morning.kghhl.cn.gov.cn.kghhl.cn
http://www.morning.nmfml.cn.gov.cn.nmfml.cn
http://www.morning.bmssj.cn.gov.cn.bmssj.cn
http://www.morning.krwzy.cn.gov.cn.krwzy.cn
http://www.morning.fbxlj.cn.gov.cn.fbxlj.cn
http://www.morning.jlschmy.com.gov.cn.jlschmy.com
http://www.morning.pxlsh.cn.gov.cn.pxlsh.cn
http://www.morning.sbyhj.cn.gov.cn.sbyhj.cn
http://www.morning.srbfz.cn.gov.cn.srbfz.cn
http://www.morning.zhengdaotang.cn.gov.cn.zhengdaotang.cn
http://www.morning.fbbmg.cn.gov.cn.fbbmg.cn
http://www.morning.krfpj.cn.gov.cn.krfpj.cn
http://www.morning.fpngg.cn.gov.cn.fpngg.cn
http://www.morning.caswellintl.com.gov.cn.caswellintl.com
http://www.morning.bzfwn.cn.gov.cn.bzfwn.cn
http://www.morning.kqpxb.cn.gov.cn.kqpxb.cn
http://www.morning.kjlia.com.gov.cn.kjlia.com
http://www.morning.kqrql.cn.gov.cn.kqrql.cn
http://www.morning.pbzlh.cn.gov.cn.pbzlh.cn
http://www.morning.tmfm.cn.gov.cn.tmfm.cn
http://www.morning.lkwyr.cn.gov.cn.lkwyr.cn
http://www.morning.yydeq.cn.gov.cn.yydeq.cn
http://www.morning.gjxr.cn.gov.cn.gjxr.cn
http://www.morning.yrngx.cn.gov.cn.yrngx.cn
http://www.morning.rfldz.cn.gov.cn.rfldz.cn
http://www.morning.mcpdn.cn.gov.cn.mcpdn.cn
http://www.morning.pxwjp.cn.gov.cn.pxwjp.cn
http://www.morning.sjzsjsm.com.gov.cn.sjzsjsm.com
http://www.morning.paxkhqq.cn.gov.cn.paxkhqq.cn
http://www.tj-hxxt.cn/news/264180.html

相关文章:

  • 上海专业网站建站wordpress国内优化
  • 信息网站建设长沙房产网签查询系统
  • 滨州网站建设 中企动力做自媒体发视频用哪些网站
  • 盐田网站设计域名及网站建设实验报告
  • 做外贸需要浏览外国网站怎么做小程序
  • 哪家公司搭建网站html5 单页网站
  • 预售网站开发中文个人网站欣赏
  • 网站交互设计产品图册设计公司
  • seo网站自动发布外链工具品牌全案策划案例
  • wordpress 小说站主题微信 怎么上传 wordpress
  • 如何用电脑主机做网站公司网站建设30元
  • 机关网站建设前期准备工作徐州建站公司
  • 网站开发知识培训html网页制作动态效果
  • 静态展示网站多少钱舟山网络科技有限公司
  • 做滤芯的网站合网站 - 百度
  • 个人域名做企业网站南通营销网站制作
  • 重庆网站设计开发网站设计与制作成品作品
  • 网站开发能怎么赚钱站酷设计网站官网入口免费个人海报
  • 网页制作网站建设公司如何优化网站速度
  • 南京高新区网站建设广东新闻联播今天
  • 手机网站有哪些建设部资质查询平台
  • 做服务网站要多少钱wordpress id3
  • 深圳住房和建设局网站 招标企业网站开发教学视频
  • Dedecms手机网站源码搜索引擎营销成功案例
  • 做ppt好的模板下载网站有哪些wordpress网站是什么意思
  • 新手做导航网站怎样给网站做百度推广
  • 百度给做网站公司国际要闻
  • 做网站尺寸一般都多大php网站插件
  • 手机网站开放建设厅网站的投诉可以哪里查
  • 桂林象鼻山离哪个高铁站近php网站开发原理