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

大学生商品网站建设网站维护费用一般多少钱

大学生商品网站建设,网站维护费用一般多少钱,金华做网站,魅族官方网站挂失手机找到怎么做目录 1. 面向过程和面向对象初步认识2. 类的引入3. 类的定义4. 类的访问限定符及封装4.1 访问限定符4.2 封装 5. 类的作用域6. 类的实例化7. 类对象模型7.1 如何计算类的大小7.2 类对象的存储方式猜测7.3 结构体内存对齐规则 8. this指针8.1 引出8.2 this指针的特性 总结 1. 面… 目录 1. 面向过程和面向对象初步认识2. 类的引入3. 类的定义4. 类的访问限定符及封装4.1 访问限定符4.2 封装 5. 类的作用域6. 类的实例化7. 类对象模型7.1 如何计算类的大小7.2 类对象的存储方式猜测7.3 结构体内存对齐规则 8. this指针8.1 引出8.2 this指针的特性 总结 1. 面向过程和面向对象初步认识 C语言是面向过程的关注的是过程分析出求解问题的步骤通过函数调用逐步解决问题。 比如说洗衣服一般分为以下几个步骤 以上的每一个步骤都是需要人来做的也就是说人是要对每个步骤应该做的事情都要清楚在语言层面对应依次设计和实现函数来解决遇到的每个问题这就是面向过程的大体思想。 C是基于面向对象的关注的是对象将一件事情拆分成不同的对象靠对象之间的交互完成。 同样是洗衣服用面向对象的思路则是要把解决的问题分为几个对象人、衣服、洗衣机洗衣粉。 洗衣服的过程则为人把衣服放进洗衣机–倒入洗衣粉–启动洗衣机–最后洗衣机洗完会把衣服甩干。 这里的整个过程主要是这几个对象之间互相交互完成的而有些步骤人是不需要知道的比如洗衣机是如何洗衣服以及如何甩干的这是面向对象的思想。 2. 类的引入 C语言结构体中只能定义变量在C中结构体内不仅可以定义变量也可以定义函数。因为C把结构体升级成了类 //C语言只能这么玩 struct stu {//成员变量char name[20];int age;//... };//C struct stu {//成员函数char* getName() {return name;}int getAge() {return age;}//...//成员变量char name[20];int age;//... };同样定义一个结构体对象也多了一种方式 int main() {//C语言只能像下面这样定义结构体变量struct stu s1;//C不仅可以支持C语言的写法//下面这种写法也是支持的stu s2;//stu是类名直接定义变量return 0; }C在语法层面上是完全兼容C的虽然上面的类型是结构体但是编译器已经把它识别成了类所以C更喜欢用关键字class来代替struct。 在C中用类或者结构定义的变量一般都称之为对象。 3. 类的定义 class className {// 类体由成员函数和成员变量组成 }; // 一定要注意后面的分号class为定义类的关键字ClassName为类的名字{}中为类的主体注意类定义结束时后面分号不能省略。 与定义结构体的语法是一样的。 类体中内容称为类的成员类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。 类的两种定义方式 声明和定义全部放在类体中需注意成员函数如果在类中定义编译器可能会将其当成内联函数处理。类声明放在.h文件中成员函数定义放在.cpp文件中注意如果定义与声明分离那么在定义处成员函数名前需要加 类名::否则编译器无法识别是成员函数还是普通全局函数如下 class stu {char* getName();int getAge();char name[20];int age;//... }; char* stu::getName() {return name; } int stu::getAge() {return age; }若类中定义的成员函数过多尽量使用第二种方法这样有利于提高代码的可读和可维护性。 成员变量命名规则建议 class Date { public:void Init(int year){// 这里的year到底是成员变量还是函数形参year year;} private:int year; };为了避免上述不必要的争议建议把成员变量的名称都加上一些前后缀来区分比如 class Date { public:void Init(int year){_year year;} private://前缀加上一个下划线int _year;//或则int Year; };其他方式也可以的主要目的是为了区分。 4. 类的访问限定符及封装 4.1 访问限定符 把struct改为class后下面代码编译后会报错 原因是C在类中新增了三个访问限定符分别是 说明如下 public修饰的成员在类外可以直接被访问protected和private修饰的成员在类外不能直接被访问(它俩有些区别但此处protected和private的作用是类似的)访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止如果后面没有访问限定符作用域就到 } 即类结束。class的默认访问权限为privatestruct为public(因为struct要兼容C) 从最后一条可以得知报错的原因是class定义的类类中的成员变量和成员函数的默认访问权限是private即外部无法直接访问类中的任何成员而struct可以是因为它的默认访问权限是public。 注意访问限定符只在编译时有用当数据映射到内存后没有任何访问限定符上的区别 为了使得该段代码能够正常通过编译一种做法是在前面加上public访问限定符 class stu { public:char* getName();int getAge();char name[20];int age; };这样便可顺利通过编译但是出于安全性考虑大部分情况是类中的成员变量不想让外部直接被访问到但是又需要使用这些变量因此为了满足这种情况只需要把成员函数公有即可成员变量进行私有保护 class stu { public:char* getName();int getAge(); private:char name[20];int age; };这种做法很好的保护了成员变量被非法访问若要访问必须通过对外提供的接口来安全访问这些私有成员。 你要访问使用我可以但是你必须要按照我给你提供的方法来操作 问题C中struct和class的区别是什么 答C需要兼容C语言所以C中struct可以当成结构体使用。另外C中struct还可以用来定义类。和class定义类是一样的区别是struct定义的类默认访问权限是publicclass定义的类默认访问权限是private。 注意在继承和模板参数列表位置struct和class也有区别后序会介绍 4.2 封装 封装是面向对象的三大特性之一另外两个分别为继承和多态。 另外两个后续会介绍 封装不仅在语言中很常见在现实生活中也是如此那么什么是封装 封装将数据和操作数据的方法进行有机结合隐藏对象的属性或者一些方法的实现细节仅对外公开接口来和对象进行交互。 举个现实中例子 计算机的组成以及底层的工作原理十分复杂但是对于使用者而言压根不太需要关心只需要知道怎么开机、怎么使用鼠标键盘等来操作计算机就够了。 因此厂商在出厂时在外部套上壳子把内部的组成和实现细节全部隐藏起来对外仅仅暴露出电源以及部分io接口能让用户和计算机交互即可。 不仅方便了用户也对计算机本体进行了很好的保护 这是现实层面在语言层面C的封装是怎么体现的呢 它是通过类将数据以及操作数据的方法进行有机结合通过访问权限来隐藏对象内部实现细节控制哪些方法可以在类外部直接被使用。 因此封装的本质是一种管理能让用户更方便的使用类。 5. 类的作用域 类定义了一个新的作用域类的所有成员都在类的作用域中。在类体外定义成员时需要使用 :: 作用域操作符指明成员属于哪个类域。 在成员函数内部使用一个变量或者函数时会先在该函数的局部域中查找若找不到再去类域中去找还找不到则会去全局域中去找找不到就报错有命名空间也不会去命名空间中去找。 同样可以指定去命名空间域中去找找不到就报错 6. 类的实例化 用类类型创建对象的过程称为类的实例化或者叫做对象的定义 class stu { public:char* getName();int getAge(); private:char name[20]; int age; }; int main() {//对象的实例化stu s1;stu s2;return 0; }类类型和结构体类型是一样的本质只是定义一个新的类型类型是不占用内存空间的只有用该类型实例化出一个对象(变量)才会在内存中开辟空间来存储类中声明的那些成员。 就好比建筑图纸图纸只有一份并不占地方只有通过图纸建造出很多实体建筑才会占用地方 7. 类对象模型 7.1 如何计算类的大小 先说结论计算一个类的大小与计算一个结构体类型的大小规则是完全一致的。 class stu { public:char* getName();int getAge(); private:char name[20]; int age; }; int main() {cout sizeof(stu) endl;return 0; }这里的运行结果为24字符数组占20个字节整形占了4个字节非常奇怪的是类中的成员函数并没有占用空间这是为什么 先举个简单的例子一个小区有多户人家每家的房子一定都是独立的都有各自的卧室、客厅和厨房等等但是若要建一个游泳池或者健身房有没有必要给每一家都建一个呢是可以的但是没必要因为这类建筑对于每户人家的作用是一致的会造成大量的空间浪费所以比较好的方法是把它们独立出来在一个公共的区域去建这样所有人都可以用很大程度的减少了空间的浪费。 有了这个例子对于上面的问题就比较好理解了其实类比到类是一样的。 多户人家可以当作多个实例化出来的对象每个对象中的成员变量可以当作对应的卧室、客厅和厨房成员函数则当作健身房其中成员变量必须是存储在不同的空间中而因为每个对象中的成员函数的作用是相同的要是每个对象都存储的话会造成空间浪费因此在存储的时候可以把它们独立出来放在一块公共的代码段不同的对象都可以找到然后调用它。 7.2 类对象的存储方式猜测 关于类对象的存储模型有以下三种 对象中包含类的各个成员 这种做法是有缺陷的每个对象中成员变量是不同的但是调用同一份函数如果按照此种方式存储当一个类创建多个对象时每个对象中都会保存一份代码相同代码保存多次浪费空间。 代码只保存一份在对象中保存存放函数的地址 很大程度的解决了第一种空间浪费的问题但没有完全解决。 只保存成员变量成员函数存放在公共的代码段 这种是最优的一种实现方法有了上面提到的例子可以发现的是类对象的存储模型就是采用的第三种方法完美解决了空间的浪费。 注意没有成员变量的类或者空类的大小只有一个字节作为占位符不存储有效数据告诉编译器对象存在。 7.3 结构体内存对齐规则 最开始提到过计算类的大小与计算结构体类型大小的规则是一样的都要遵循结构体内存对齐原则具体的在这篇文章中详细地介绍了这里不再赘述。 8. this指针 8.1 引出 先定义一个日期类 class Date{ public:void Init(int year, int month, int day) {_year year;_month month;_day day;}void Print(){cout _year - _month - _day endl;} private:int _year; // 年int _month;// 月int _day; // 日 }; int main() {Date d1, d2;d1.Init(2022,1,11);d2.Init(2022, 1, 12);d1.Print();d2.Print();return 0; }输出结果 在主函数中定义了两个对象分别调用Print函数输出了不同的日期而两个对象都是调的同一个函数上面说过不同的对象它们的成员函数所在的区域则是相同的函数体中也没有不同对象的区分那么函数是如何识别是哪个对象调用了我呢 C中通过引入this指针解决该问题即C编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数让该指针指向当前对象在函数体中所有“成员变量”的操作都是通过该指针去访问。只不过所有的操作对用户是透明的即用户不需要来传递编译器自动完成。 因此上面的代码在被编译器处理后变成下面这样子 //所有的非静态成员函数都会被处理不一一写了//处理前 void Print(){cout _year - _month - _day endl; } d1.Print(); d2.Print();//处理后 void Print(Date* const this) {cout this-_year - this-_month - this-_day endl; }d1.Print(d1);d2.Print(d2);需要注意的是this指针传参是编译器的工作用户不需要显式地传也不能否则会报错但是却可以在函数体里显式地使用this指针因为有些场景会使用它。 8.2 this指针的特性 this指针的类型类类型* const即成员函数中不能给this指针赋值。只能在“成员函数”的内部使用。this指针本质上是“成员函数”的形参当对象调用成员函数时将对象地址作为实参传递给this形参。所以对象中不存储this指针。this指针是“成员函数”第一个隐含的指针形参一般情况由编译器通过ecx寄存器自动传递不需要用户传递。 两个题 this指针存在哪里 this指针虽然是编译器隐式传递的参数但本质也是一个形式参数是参数就会在函数调用时被依次压入到栈中函数调用结束形参也随之被销毁了。this指针可以为空吗 可以但如果为空则不可以在函数体中解引用访问对应的成员变量因为对空指针解引用会报错。 总结 C中的类是从C语言里的结构体进化而来并且引入了面向对象的思想即封装使得成员变量和成员方法可以一起放在类中使其之间的联系更加紧密同时增加了类的访问限定符不仅使得访问类中的成员更加规范化而且也屏蔽了底层的部分实现细节提高了代码的保密性。
http://www.zqtcl.cn/news/587272/

相关文章:

  • 射阳做企业网站哪家好利用新冠消灭老年人
  • 网站头部修改wordpress php幻灯片代码
  • 网络违法犯罪举报网站哪里有制作网站服务
  • 临沂怎么做网站网站 单页
  • 科技信息网站系统建设方案建筑设计专业世界大学排名
  • 做网站运营的简历小型视频网站建设
  • 福建省亿力电力建设有限公司网站网页设计html代码大全动物
  • 如何建网站赚取佣金企业网站的在线推广方法有
  • 嵌入式转行到网站开发免费秒玩小游戏
  • 采购网站排名不需要证件做网站
  • wordpress添加用户登录东莞网络公司seo优化
  • 哪些企业网站使用水墨风格设计免费
  • 河北邯郸做网站的公司哪家好云南建站公司
  • 网站开发如何给用户发邮件wordpress中文插件下载
  • 专业外贸网站建设公司排名网站错误列表
  • 魔站建站系统哪家好扬州网站开发公司电话
  • 合伙做网站网络公司网站建设首页
  • 网站建设项目经理深圳在线官网
  • 网站开发技术及应用wordpress自定义类型使用模板
  • 网站颜色 字体代销网站源码
  • 做二手车有哪些网站有哪些手续翠竹林wordpress主题
  • 商城网站开发报价单献县做网站价格
  • 做网站和推广需要多少钱诚信企业查询系统
  • c 2015 做网站网站设计技术有哪些?
  • 安丘网站开发主播网站建立
  • 档案网站的建设wordpress英文主题 汉化
  • 网站建设礼品南充网站建设工作室
  • 电子商务网站建设概念wordpress 扫码支付宝
  • 上海做网站谁好营销型网站框架图
  • 太仓企业网站建设价格wordpress自动同步插件