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

天河网站(建设信科网络)网站制作风格类型

天河网站(建设信科网络),网站制作风格类型,wordpress附件地址,网站建设找什么公司好1. 类的定义 1.1 类定义格式 • class为定义类的关键字#xff0c;Stack为类的名字#xff0c;{ }中为类的主体#xff0c;注意类定义结束时后面分号不能省略。类体中内容称为类的成员#xff1a;类中的变量称为类的属性或成员变量; #xff08;类和结构体非常像#…1. 类的定义 1.1 类定义格式 • class为定义类的关键字Stack为类的名字{ }中为类的主体注意类定义结束时后面分号不能省略。类体中内容称为类的成员类中的变量称为类的属性或成员变量; 类和结构体非常像跟结构体不一样的就是在类里面可以定义函数类中的函数称为类的方法或者成员函数。 • 为了区分成员变量⼀般习惯上成员变量会加⼀个特殊标识如成员变量前面或者后面加_ 或者 m开头注意C中这个并不是强制的只是一些惯例具体看公司的要求。 • C中也可以使用struct来定义类C兼容C中struct的用法同时struct升级成了类明显的变化是struct中可以定义函数一般情况下我们还是推荐用class定义类。struct 也可以定义类 这是我们在C语言中定义的 在C中就不一样了在C中struct就可以定义函数但是我们遵循1.1第二条的原则要加一个特殊标识符就要设计成这个样子了。 • 定义在类里面的成员函数默认为inline。 在C之后就可以用类名当类型定义对象。类名就是类型用类型来定义对象 类可以对比我们的结构体学习跟结构体不同的地方是类里面可以定义函数这是最大的不同用法上不用加class。 #define _CRT_SECURE_NO_WARNINGS 1 #includeiostream #includeassert.h using namespace std; class Stack { public:     // 成员函数     void Init(int n 4)     {         array (int*)malloc(sizeof(int) * n);         if (nullptr array)         {             perror(malloc申请空间失败);             return;         }         capacity n;         top 0;     }     void Push(int x)     {         // ...扩容         array[top] x;     }int Top()     {         assert(top 0);         return array[top - 1];     }     void Destroy()     {         free(array);         array nullptr;         top capacity 0;     } private:     // 成员变量     int* array;     size_t capacity;     size_t top; }; // 分号不能省略 struct Person { public:     void Init(const char* name, int age, int tel)     {         //在这要初始化这个名字就不能直接给了我们要借助C语言的库函数strcpy         strcpy(_name, name);//加个特殊标识好区分         _age age;         _tel tel;     }     //我们也可以写一个打印函数     void Print()     {         cout 姓名 _name endl;         cout 年龄 _age endl;         cout 电话号码 _tel endl;     } private:     char _name[10]; //在这为什么不用const char*而要用一个数组呢     int _age;      //用一个数组的原因是后面我们要修改一个信息我们就可以修改如果用一个const char*     int _tel;     //外面是一个常量字符串想修改我们的名字是修改不了的。其实用const char*也可以不影响。 }; int main() {     /*Stack st;     st.Init();     st.Push(1);     st.Push(2);     cout st.Top() endl;     st.Destroy();*/     Person p1;     p1.Init(张三, 18, 110);     p1.Print();     return 0; } //我们用class定义类的时候与struct定义类的时候一模一样在这个角度来说 //C对这块定义的时候进行了升级 反正不论struct还是class一般来说成员变量都是私有的不期望在外面去访问要访问都通过成员函数去访问。 C还有一个特点是兼容C当中struct的所有用法 1.2 访问限定符 • C⼀种实现封装的方式用类将对象的属性与方法结合在⼀块让对象更加完善通过访问权限选择性的将其接口提供给外部的用户使用。 • 公有就是 public修饰的成员在类外可以直接被访问protected和private修饰的成员在类外不能直接被访问在我们这个阶段我们认为protected和private是一样的以后继承章节才能体现出他们的区别。 • 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止如果后面没有访问限定符作用域就到 } 即类结束。 • class定义成员没有被访问限定符修饰时默认为privatestruct默认为public。 • 一 般成员变量都会被限制为private/protected需要给别人使用的成员函数会放为public。一般情况下一个类成员变量都是私有的成员函数大部分都是公有的。 一般来说我的类设计的时候我不期望你随便访问修改我的数据。你要访问我的数据本质是通过调用我的函数去访问比如说要初始化调用Init函数要插入数据调用Push也不用关心Top到底是指向栈顶元素还是栈顶元素的下一个要插入数据就插入要获取栈顶元素就获取要初始化就初始化要销毁就销毁不用管里面的细节这是一种封装的体现这呢对比C语言是有好处的有什么好处呢这里我们把类学了更多了以后这个章节的最后一个部分 4. C和C语言实现Stack对比我们再来对比。 1.3 类域 • 类定义了以个新的作用域类的所有成员都在类的作用域中在类体外定义成员时需要使用 :: 作用域操作符指明成员属于哪个类域。 我们说同一个域不能有同名变量不同的域可以有同名变量所以类这块也形成一个域叫做类域。 • 类域影响的是编译的查找规则下面程序中Init如果不指定类域Stack那么编译器就把Init当成全 局函数那么编译时找不到array等成员的声明/定义在哪里就会报错。指定类域Stack就是知 道Init是成员函数当前域找不到的array等成员就会到类域中去查找。 2. 实例化 2.1 实例化概念 • 用 类的类型在物理内存中创建对象的过程称为类实例化出对象。 • 类是对象进行一种抽象描述是一个模型一样的东西限定了类有哪些成员变量这些成员变量只是声明没有分配空间用类实例化出对象时才会分配空间。 • 一 个类可以实例化出多个对象实例化出的对象占用实际的物理空间存储类成员变量。打个比方类实例化出对象就像现实中使用建筑设计图建造出房子类就像是设计图设计图规划了有多少个房间房间大小功能等但是并没有实体的建筑存在也不能住人用设计图修建出房子房子才能住人。同样类就像设计图⼀样不能存储数据实例化出的对象分配物理内存存储数据。类里面不能存数据 接下来我们定义一个日期类 class Data { public:     void Init(int year, int month, int day)     {         _year year;         _month month;         _day day;     } private:     //下面三个变量都是声明     int _year;     int _month;     int _day; }; int year;//这里是定义 int main() {     //我们用class定义出的是一个类型Data     //用类型定义出一个对象d1这个对象包含_year,_month,_day     //是随着对象定义而定义的这里的对象定义我们把它叫做类实例化出对象     //类和对象的关系是一对多的关系也就是说一个类可以实例化出多个对象     Data d1;     return 0; } 声明和定义不能用初始化来区分声明和定义的特征在这个地方要用什么来看呢比较好的一个方式就是有没有开空间。 2.2 对象大小 分析⼀下类对象中哪些成员呢类实例化出的每个对象都有独立的数据空间所以对象中肯定包含成员变量那么成员函数是否包含呢首先函数被编译后是⼀段指令对象中没办法存储这些指令存储在一个单独的区域(代码段)那么对象中非要存储的话只能是成员函数的指针。再分析⼀下对象中是否有存储指针的必要呢Date实例化d1和d2两个对象d1和d2都有各自独立的成员变量_year/_month/_day存储各自的数据但是d1和d2的成员函数Init/Print指针却是⼀样的存储在对象中就浪费了。如果用Date实例化100个对象那么成员函数指针就重复存储100次太浪费了。这里需要再额外哆嗦一下其实函数指针是不需要存储的函数指针是一个地址调用函数被编译成汇编指令[call 地址] 其实编译器在编译链接时就要找到函数的地址不是在运行时找只有动态多态是在运行时找就需要存储函数地址这个我们以后会讲解。 对象大小怎么算呢 上面我们分析了对象中只存储成员变量C规定类实例化的对象也要符合内存对齐的规则。 首先也是要考虑内存对齐的问题其实类的对象实例化里面只存了成员变量没有存成员函数。成员函数可以认为存储在一个公共的区域。严格来说成员函数如果你调用是在编译时就确定好地址了只是函数呢编译好指令会存到一个公共的代码段。它不需要那个指针单独往对象里面存因为都是一样的。编译的时候就已经确定好这个地址了。 内存对齐规则 • 第一个成员在与结构体偏移量为0的地址处。 • 其他成员变量要对齐到某个数字对齐数的整数倍的地址处。 • 注意对齐数 编译器默认的⼀个对齐数 与 该成员大小的较小值。 • VS中默认的对齐数为8 • 结构体总大小为最大对齐数所有变量类型最大者与默认对齐参数取最小的整数倍。 • 如果嵌套了结构体的情况嵌套的结构体对齐到自己的最大对齐数的整数倍处结构体的整体大小就是所有最大对齐数含嵌套结构体的对齐数的整数倍。 上面的程序运行后我们看到没有成员变量的B和C类对象的大小是1为什么没有成员变量还要给1个字节呢因为如果⼀个字节都不给怎么表示对象存在过呢所以这里给1字节纯粹是为了占位标识对象存在。 首先类B和类C是一样的都没有成员变量那结果不应该是0吗为什么会是1呢 如果是0的话说明B和C定义的时候不需要开空间不需要开空间怎么表示B和C存在过呢假设不开空间那么类B和类C的地址是什么0个字节不需要开辟空间那它的地址是什么 所以对于没有成员变量的类呢 它的对象我们要给它开空间开多大的空间呢开一个字节那开一个字节是干嘛的是为了占位不存储有效数据。只是为了标识对象存在。我们后面会讲到仿函数的类这个类基本上就没有成员变量。没有成员变量的类还是很常用的。 class A { public:     void Print()     {         cout _ch endl;     } private:     char _ch;     int _i; }; class B { public:     void Print()     {         //...     } }; class C {}; int main() {     A a;     B b;     C c;     cout sizeof(a) endl; cout sizeof(b) endl;     cout sizeof(c) endl;     return 0; } 3. this指针 • Date类中有 Init 与 Print 两个成员函数函数体中没有关于不同对象的区分那当d1调用Init和 Print函数时该函数是如何知道应该访问的是d1对象还是d2对象呢那么这里就要看到C给了 一个隐含的this指针解决这里的问题。 • 编译器编译后类的成员函数默认都会在形参第⼀个位置增加⼀个当前类类型的指针叫做this指针。比如Date类的Init的真实原型为 void Init(Date* const this, int year, int month, int day)所有的成员函数都有一个隐含的参数这个参数叫this。 #includeiostream using namespace std; class Date { public:     //这里的Init隐含一个形参 void Init(Date* const this, int year, int month, int day)     void Init(int year, int month, int day)     {         // 编译报错error C2106: “”: 左操作数必须为左值         // this nullptr;         // this-_year year;         _year year;         this-_month month;         this-_day day;     }     //所有的成员函数都有一个隐含的参数这个参数叫this     //void Print(Date* const this, int year, int month, int day)      void Print()      {         //cout this-_year / this-_month / this-_day endl;         cout _year / _month / _day endl;     } private:     // 这里只是声明没有开空间     int _year;     int _month;     int _day; }; int main() {     // Date类实例化出对象d1和d2     Date d1;     Date d2;     //在这调用Init也不是这样调用的是这样调用的     //d1.Init(d1, 2024, 3, 31);     //d2.Init(d2, 2024, 7, 5);     //所以Init和Print的时候就能够区分谁是谁了     //调用的确确实实是一个函数但是用d1调用的时候this是d1的地址     //用d2调用的时候this是d2的地址。     //d1.Print(d1);     //d2.Print(d2);     d1.Init(2024, 3, 31);     d1.Print();     d2.Init(2024, 7, 5);     d2.Print();     return 0; } • 类的成员函数中访问成员变量本质都是通过this指针访问的如Init函数中给_year赋值 this- _year year;也就意味着在这打印的时候其实编译器是做成下面的样子的 • C规定不能在实参和形参的位置显示的写this指针(编译时编译器会处理)具体编译器的处理是什么样的要看上图。但是可以在函数体内显示使用this指针。 实参、形参、函数体类你不加编译器都会显示的加但是实参和形参的位置我们不能显示加函数体类我们可以显示着加 。 4. C和C语言实现Stack对比 面向对象三大特性封装、继承、多态下面的对比我们可以初步了解⼀下封装。 通过下面两份代码对比我们发现C实现Stack形态上还是发生了挺多的变化底层和逻辑上没啥变化。 • C中数据和函数都放到了类里面通过访问限定符进行了限制不能再随意通过对象直接修改数据这是C封装的⼀种体现这个是最重要的变化。这里的封装的本质是⼀种更严格规范的管 理避免出现乱访问修改的问题。当然封装不仅仅是这样的我们后面还需要不断的去学习。 • C中有⼀些相对方便的语法比如Init给的缺省参数会方便很多成员函数每次不需要传对象地 址因为this指针隐含的传递了方便了很多使用类型不再需要typedef用类名就很方便 • 在我们这个C入门阶段实现的Stack看起来变了很多但是实质上变化不大。等着我们后面看STL中的用适配器实现的Stack大家再感受C的魅力。
文章转载自:
http://www.morning.mcjyair.com.gov.cn.mcjyair.com
http://www.morning.tcsdlbt.cn.gov.cn.tcsdlbt.cn
http://www.morning.zhiheliuxue.com.gov.cn.zhiheliuxue.com
http://www.morning.pypbz.cn.gov.cn.pypbz.cn
http://www.morning.bpmdz.cn.gov.cn.bpmdz.cn
http://www.morning.qtqk.cn.gov.cn.qtqk.cn
http://www.morning.prgyd.cn.gov.cn.prgyd.cn
http://www.morning.fnrkh.cn.gov.cn.fnrkh.cn
http://www.morning.yxzfl.cn.gov.cn.yxzfl.cn
http://www.morning.bwygy.cn.gov.cn.bwygy.cn
http://www.morning.qxlxs.cn.gov.cn.qxlxs.cn
http://www.morning.tndhm.cn.gov.cn.tndhm.cn
http://www.morning.phnbd.cn.gov.cn.phnbd.cn
http://www.morning.sqlh.cn.gov.cn.sqlh.cn
http://www.morning.chxsn.cn.gov.cn.chxsn.cn
http://www.morning.pcqxr.cn.gov.cn.pcqxr.cn
http://www.morning.kpqjr.cn.gov.cn.kpqjr.cn
http://www.morning.kpwcx.cn.gov.cn.kpwcx.cn
http://www.morning.rdfq.cn.gov.cn.rdfq.cn
http://www.morning.lffrh.cn.gov.cn.lffrh.cn
http://www.morning.kkrnm.cn.gov.cn.kkrnm.cn
http://www.morning.bnlkc.cn.gov.cn.bnlkc.cn
http://www.morning.gwsdt.cn.gov.cn.gwsdt.cn
http://www.morning.pxjp.cn.gov.cn.pxjp.cn
http://www.morning.tfpqd.cn.gov.cn.tfpqd.cn
http://www.morning.tslfz.cn.gov.cn.tslfz.cn
http://www.morning.mkhwx.cn.gov.cn.mkhwx.cn
http://www.morning.bqpg.cn.gov.cn.bqpg.cn
http://www.morning.fznj.cn.gov.cn.fznj.cn
http://www.morning.jrtjc.cn.gov.cn.jrtjc.cn
http://www.morning.bcdqf.cn.gov.cn.bcdqf.cn
http://www.morning.mbfkt.cn.gov.cn.mbfkt.cn
http://www.morning.znknj.cn.gov.cn.znknj.cn
http://www.morning.rttxx.cn.gov.cn.rttxx.cn
http://www.morning.rhdln.cn.gov.cn.rhdln.cn
http://www.morning.bsxws.cn.gov.cn.bsxws.cn
http://www.morning.rsnn.cn.gov.cn.rsnn.cn
http://www.morning.wdnkp.cn.gov.cn.wdnkp.cn
http://www.morning.zyrp.cn.gov.cn.zyrp.cn
http://www.morning.wgqtt.cn.gov.cn.wgqtt.cn
http://www.morning.synkr.cn.gov.cn.synkr.cn
http://www.morning.nthyjf.com.gov.cn.nthyjf.com
http://www.morning.zsrdp.cn.gov.cn.zsrdp.cn
http://www.morning.rwmqp.cn.gov.cn.rwmqp.cn
http://www.morning.srndk.cn.gov.cn.srndk.cn
http://www.morning.dpzcc.cn.gov.cn.dpzcc.cn
http://www.morning.sdktr.com.gov.cn.sdktr.com
http://www.morning.ljglc.cn.gov.cn.ljglc.cn
http://www.morning.tgwfn.cn.gov.cn.tgwfn.cn
http://www.morning.prhqn.cn.gov.cn.prhqn.cn
http://www.morning.bgpch.cn.gov.cn.bgpch.cn
http://www.morning.dtpqw.cn.gov.cn.dtpqw.cn
http://www.morning.bmjfp.cn.gov.cn.bmjfp.cn
http://www.morning.mnpdy.cn.gov.cn.mnpdy.cn
http://www.morning.snrbl.cn.gov.cn.snrbl.cn
http://www.morning.qpqwb.cn.gov.cn.qpqwb.cn
http://www.morning.ddjp.cn.gov.cn.ddjp.cn
http://www.morning.nafdmx.cn.gov.cn.nafdmx.cn
http://www.morning.dmtld.cn.gov.cn.dmtld.cn
http://www.morning.wcczg.cn.gov.cn.wcczg.cn
http://www.morning.sgpny.cn.gov.cn.sgpny.cn
http://www.morning.tymnr.cn.gov.cn.tymnr.cn
http://www.morning.xcjwm.cn.gov.cn.xcjwm.cn
http://www.morning.tdnbw.cn.gov.cn.tdnbw.cn
http://www.morning.nwtmy.cn.gov.cn.nwtmy.cn
http://www.morning.wqpb.cn.gov.cn.wqpb.cn
http://www.morning.bjsites.com.gov.cn.bjsites.com
http://www.morning.rkdzm.cn.gov.cn.rkdzm.cn
http://www.morning.vvdifactory.com.gov.cn.vvdifactory.com
http://www.morning.crkmm.cn.gov.cn.crkmm.cn
http://www.morning.stcds.cn.gov.cn.stcds.cn
http://www.morning.dyfmh.cn.gov.cn.dyfmh.cn
http://www.morning.wgqtj.cn.gov.cn.wgqtj.cn
http://www.morning.xwnnp.cn.gov.cn.xwnnp.cn
http://www.morning.lbbgf.cn.gov.cn.lbbgf.cn
http://www.morning.touziyou.cn.gov.cn.touziyou.cn
http://www.morning.bqhlp.cn.gov.cn.bqhlp.cn
http://www.morning.rfbt.cn.gov.cn.rfbt.cn
http://www.morning.ggfdq.cn.gov.cn.ggfdq.cn
http://www.morning.wrqw.cn.gov.cn.wrqw.cn
http://www.tj-hxxt.cn/news/234857.html

相关文章:

  • 具有价值的做网站wordpress 转圈加载
  • 天河建设网站开发东莞寮步华衍学校
  • 高校部门网站建设建站行业消失了吗
  • 企业网站建设实训建议检察机关加强网站建设
  • 网站做图标链接dedecms 食品网站模板
  • 阿升网站免费学设计wordpress 自动翻译插件
  • 网站建设张家港室内设计师收入
  • 变化型网站网页制作软件2023
  • 在国内可以做国外的网站吗课程介绍网站建设ppt模板
  • 安徽鑫华建设有限公司网站徐州网站建设xzwzjs
  • 客户说做网站没效果怎么回答好互联网技术培训学校
  • 深圳做网站乐云seo费用优惠p2p网站数据分析怎么做
  • 爱做网站外国合肥瑶海区教育局官网
  • 网站设计思路文案范文建设专业网站电话咨询
  • 商务网站制作工程师客户管理软件免费版哪个好用
  • 网站后台不更新wordpress加百度一下
  • 腾讯建设网站视频视频下载儿童网站建设
  • 个人网站建设的参考文献wordpress建站访问不了
  • html 音乐网站莱芜民生网站
  • 成都手机微信网站建设报价单直接进入网址的浏览器
  • 网站开发实现电脑版和手机版的切换做防水广告在哪个网站最好
  • 班级网站开发报告苏醒wordpress下载
  • jsp网站开发存在的问题做打牌的网站怎么办
  • 外贸网站的作用专业的图纸设计网站
  • 深圳网站建设公司专业营销型网站哪家好
  • 个人网站建设 开题报告易企秀官网
  • 网站开发研发设计百度秒收录的网站
  • 网站策划方案如何做邯郸哪有做网站的
  • 深圳网站开发哪个公司好湖南手机版建站系统信息
  • 做同城网站需要哪些手续深圳专业做网站专业