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

上海高端网站开发站霸网络win2003建设网站

上海高端网站开发站霸网络,win2003建设网站,网络项目工作室,wordpress 去掉主题版权一、C对象模型和this指针 1.1 成员变量和成员函数分开存储 在C中#xff0c;类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象 #include iostreamusing namespace std;class a1 {};class a2 {int a; };class a3 {int a;static int b; };class …一、C对象模型和this指针 1.1 成员变量和成员函数分开存储 在C中类内的成员变量和成员函数分开存储 只有非静态成员变量才属于类的对象 #include iostreamusing namespace std;class a1 {};class a2 {int a; };class a3 {int a;static int b; };class a4 {int a;void func(){} };class a5 {int a;static void func(){} };void test1() { a1 a1;// 空对象占用内存空间为1// C编译器会给每个空对象也分配一个字节空间是为了区分空对象占内存的位置// 每个空对象也应该有一个独一无二的内存地址cout size of t: sizeof(a1) endl; }void test2() {a2 a2;// 4,说明非静态成员变量属于类的对象cout size of t: sizeof(a2) endl; }void test3() {a3 a3;// 4,说明静态成员变量不属于类的对象cout size of t: sizeof(a3) endl; }void test4() {a4 a4;// 4,说明非静态成员函数不属于类的对象cout size of t: sizeof(a4) endl; }void test5() {a5 a5;// 4,说明静态成员函数不属于类的对象cout size of t: sizeof(a5) endl; }int main(int argc, char* argv[]) {test1();test2();test3();test4();test5();return 0; } 1.2 this指针概念 每一个非静态成员函数只会诞生一份函数实例也就是说多个同类型的对象会共同一块代码那么问题是这一块代码是如何区分是哪个对象调用自己的呢 C通过提供特殊的对象指针this指针解决上述问题。this指针指向被调用的成员函数所属的对象 this指针是隐含每一个非静态成员函数内的一种指针 this指针不需要定义直接使用即可 this指针的用途 1. 当形参和成员变量名同名时可用this指针来区分 #include iostreamusing namespace std;class Person { public:Person(int age){// age age; 报错this-age age;}int age; };void test() {Person p(23);cout p1的年龄: p.age endl; }int main(int argc, char* argv[]) {test();return 0; } 2. 在类的非静态成员函数中返回对象本身可使用return *this #include iostreamusing namespace std;class Person { public:Person(int age){// age age; 报错this-age age;}int age;Person addAge1(Person p){this-age p.age;return *this;}Person addAge2(Person p){this-age p.age;return *this;} };void test() {Person p1(23);cout p1的年龄: p1.age endl;Person p2(20);// addAge1返回的值p1加完p2返回的是拷贝构造函数创建的新的对象和自身不同并没有在p1上进行累加p1.addAge1(p2).addAge1(p2).addAge1(p2).addAge1(p2);cout p1的年龄: p1.age endl;// addAge2返回的引用p1加完p2返回p2本身p1.addAge2(p2).addAge2(p2).addAge2(p2).addAge2(p2);cout p1的年龄: p1.age endl; }int main(int argc, char* argv[]) {test();return 0; } 1.3 空指针访问成员函数 C中空指针也是可以调用成员函数的但是也要注意有没有用到this指针 如果用到this指针需要加以判断保证代码的健壮性 #include iostreamusing namespace std;class Person { public:void showClassName(){cout this is Person class endl;}void showAge(){// 提高代码健壮性if (this NULL){return;}// this指针指向的Person是一个空指针对象没有实体更不用说有age属性了cout age this-age endl; // 在属性的前面都默认加了this}int age; };void test() {Person* p NULL;p-showClassName(); // 可以运行p-showAge(); // 有问题 }int main(int argc, char* argv[]) {test();return 0; } 1.4 const修饰成员函数 常函数1. 成员函数加const后我们称这个函数为常函数 2. 常函数内不可以修改成员属性 3. 成员属性声明时加关键字mutable后在常函数中依然可以修改 常对象1. 声明对象前加const称该对象为常对象 2. 常对象只能调用常函数  二、友元 生活中家里有客厅(Public)有卧室(Private) 客厅所有来的客人都可以进去但是你的卧室是私有的也就是说只有你自己可以进去 但是还有一些例外比如你允许你的好朋友进去 在程序里有些私有属性也想让类外特殊的一些函数或者类进行访问就需要用到友元技术 友元的目的就是让一个函数或者类访问另一个类中的私有成员 友元的关机字为 friend 友元的三种实现1. 全局函数做友元 2. 类做友元 3. 成员函数做友元 2.1 成员函数做友元 #include iostream #include stringusing namespace std;class Building {// 告诉编译器goodfriend是全局函数是Building类的好朋友可以访问类中的私有内容friend void goodfriend(Building* building);public:Building(){this-m_SittingRoom 客厅;this-m_BedRoom 卧室;}public:string m_SittingRoom; // 客厅 private:string m_BedRoom; // 卧室 };void goodfriend(Building* building) {cout 正在访问: building-m_SittingRoom endl;cout 正在访问: building-m_BedRoom endl; }int main(int argc, char* argv[]) {Building building;goodfriend(building);return 0; } 2.2 类做友元 #include iostream #include stringusing namespace std;class Building {// 告诉编译器goodfriend是Building类的好朋友可以访问类中的私有内容friend class goodfriend;public:Building(); public:string m_SittingRoom; // 客厅 private:string m_BedRoom; // 卧室 }; // 类外写成员函数 Building::Building() {m_SittingRoom 客厅;m_BedRoom 卧室; }class goodfriend { public:Building* building;goodfriend();void visit(); }; // 类外写成员函数 goodfriend::goodfriend() {// 创建建筑物对象building new Building; } void goodfriend::visit() {cout 正在访问: building-m_SittingRoom endl;cout 正在访问: building-m_BedRoom endl; }void test() {goodfriend zz;zz.visit(); } int main(int argc, char* argv[]) {test();return 0; } 2.3 成员函数做友元 #include iostream #include stringusing namespace std;class Building; class GoodFriend { public:Building* building;GoodFriend();void visit1(); // 让visit1函数可以访问Building中私有属性void visit2(); // 让visit2函数不能访问Building中私有属性 };class Building {// 告诉编译器goodfriend是Building类的好朋友可以访问类中的私有内容friend void GoodFriend::visit1();public:Building(); public:string m_SittingRoom; // 客厅 private:string m_BedRoom; // 卧室 }; // 类外写成员函数 Building::Building() {m_SittingRoom 客厅;m_BedRoom 卧室; }// 类外写成员函数 GoodFriend::GoodFriend() {// 创建建筑物对象building new Building; } void GoodFriend::visit1() {cout 正在访问: building-m_SittingRoom endl;cout 正在访问: building-m_BedRoom endl; } void GoodFriend::visit2() {cout 正在访问: building-m_SittingRoom endl;// cout 正在访问: building-m_BedRoom endl; } void test() {GoodFriend gf;gf.visit1();gf.visit2(); } int main(int argc, char* argv[]) {test();return 0; }
http://wiki.neutronadmin.com/news/152433/

相关文章:

  • 400电话西安网站制作 彩铃制作广州做网站信息
  • 济南手机网站开发廖珍琴建盏简介
  • 网站推广智选刺盾云下拉广安网站建设公司
  • 自己做视频的网站wordpress墨客吧
  • 终身免费vps重庆网站建设seo公司哪家好
  • 网站宽度一般是多少肇庆建设工程备案的网站
  • 网站 字号 英文广东网络推广服务
  • 门户网站创建西安官网seo
  • sql数据库做的网站怎么发布个人网站设计模板下载
  • 诸城做网站找个人手机端购物网站模板下载
  • 桐梓网站开发营销策划公司品牌
  • 网站模板怎么修改教程官网订机票
  • 成都营销型网站建设重庆装修公司避坑指南
  • 门户网站域名是什么廊坊住房和城乡建设厅网站
  • 郑州做网站推广资讯门户网站和部门网站的区别
  • 然后搭建网站汽车宣传网站模板
  • 网站多页面布局网站优化课程
  • 网站开发语言排行榜克隆网站怎么做
  • 海珠建网站的公司全屋整装定制
  • 免费建立网站论坛佛山网络公司培训
  • 中小企业网站建设如何wordpress登入不了
  • 做网站选什么专业wordpress中文tag插件
  • 网站建设费计入什么科目九江网络营销
  • 洱源名师工作室网站建设化妆品网站 源码
  • 可以做热图的在线网站哈尔滨网站设计哪家公司好
  • 深圳大鹏住房和建设局网站常见网站颜色搭配
  • 全球做的比较好的网站有哪些视觉设计方案
  • 自贡网站建设室内装潢
  • 网站制作引擎软件开发和软件研发
  • 网站收录查询平台网站制作文案杭州