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

介绍自己做衣服的网站莱芜最新钟点工招聘

介绍自己做衣服的网站,莱芜最新钟点工招聘,网站做到赣州第一名要多少钱,wordpress国产插件目录 本节目标 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化 7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则 8.this指针 8.1 thi…目录 本节目标 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6. 类的实例化  7.类对象模型 7.1 如何计算类对象的大小 7.2 类对象的存储方式猜测 7.3 结构体内存对齐规则 8.this指针 8.1 this指针的引出 8.2 this指针的特性 本节目标 1.面向过程和面向对象初步 2.类的引入 3.类的定义 4.类的访问限定符及封装 5.类的作用域 6.类的实例化 7.类的对象大小的计算 8.类成员函数的this指针 1.面向过程和面向对象初步认识 C语言是面向过程的关注的是过程分析出求解问题的步骤通过函数调用逐步解决问题。 C是基于面向对象的关注的是对象将一件事情拆分成不同的对象靠对象之间的交互完成。 2.类的引入 C语言结构体中只能定义变量在C中结构体内不仅可以定义变量也可以定义函数。比如之前在数据结构初阶中用C语言方式实现的栈结构体中只能定义变量现在以C方式实现会发现struct中也可以定义函数。   typedef int DataType; struct Stack {void Init(size_t capacity){_array (DataType*)malloc(sizeof(DataType) * capacity);if (nullptr _array){perror(malloc申请空间失败);return;}_capacity capacity;_size 0;}void Push(const DataType data){// 扩容_array[_size] data;_size;}DataType Top(){return _array[_size - 1];}void Destroy(){if (_array){free(_array);_array nullptr;_capacity 0;_size 0;}}DataType* _array;size_t _capacity;size_t _size; }; int main() {Stack s;s.Init(10);s.Push(1);s.Push(2);s.Push(3);cout s.Top() endl;s.Destroy();return 0; } 在这里我们实现了栈相较于C语言是不是就方便了很多。 上面结构体的定义在C中更喜欢用class来代替。 3.类的定义 class className {// 类体由成员函数和成员变量组成 }; // 一定要注意后面的分号 class为定义类的关键字ClassName为类的名字{}中为类的主体注意类定义结束时后面分号不能省略。 类体中内容称为类的成员类中的变量称为类的属性或成员变量; 类中的函数称为类的方法或者成员函数。类的两种定义 1. 声明和定义全部放在类体中需注意成员函数如果在类中定义编译器可能会将其当成内联函数处理。 2. 类声明放在.h文件中成员函数定义放在.cpp文件中注意成员函数名前需要加类名:: 一般情况下更期望采用第二种方式。 成员变量命名规则的建议   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; }; // 或者这样 class Date { public:void Init(int year){mYear year;} private:int mYear; }; // 其他方式也可以的主要看公司要求。一般都是加个前缀或者后缀标识区分就行。 public和private是什么请看下面。 4.类的访问限定符及封装 4.1 访问限定符 C实现封装的方式用类将对象的属性与方法结合在一块让对象更加完善通过访问权限选择性的将其接口提供给外部的用户使用。 【访问限定符说明】 1. public修饰的成员在类外可以直接被访问 2. protected和private修饰的成员在类外不能直接被访问(此处protected和private是类似的) 3. 访问权限作用域从该访问限定符出现的位置开始直到下一个访问限定符出现时为止 4. 如果后面没有访问限定符作用域就到 } 即类结束。 5. class的默认访问权限为privatestruct为public(因为struct要兼容C) eg我们发现调用不了Init函数。 class date {void Init(int year, int month, int day){_year year;_month month;_day day;}int _year; int _month;int _day; }; int main() {date d1;d1.Init(2024, 1, 24); } 这是因为class 的默认访问权限是私有的要想访问则需要把想访问的内容设置成公有的。 class date { public:void Init(int year, int month, int day){_year year;_month month;_day day;} privateint _year; int _month;int _day; }; int main() {date d1;d1.Init(2024, 1, 24); } 这样Init就可以访问了而private下面的就不可以访问了。struct也是可以设置访问权限的。一般情况下C的类中的成员变量都是私有的因为一般访问和修改都是通过函数去做的所以成员一般都是公有的。 注意访问限定符只在编译时有用当数据映射到内存后没有任何访问限定符上的区别 【面试题】 问题C中struct和class的区别是什么 解答C需要兼容C语言所以C中struct可以当成结构体使用。另外C中struct还可以用来定义类。和class定义类是一样的区别是struct定义的类默认访问权限是publicclass定义的类默认访问权限是private。注意在继承和模板参数列表位置struct和class也有区别后序给大家介绍。   4.2 封装 【面试题】 面向对象的三大特性封装、继承、多态。 在类和对象阶段主要是研究类的封装特性那什么是封装呢封装将数据和操作数据的方法进行有机结合隐藏对象的属性和实现细节仅对外公开接口来和对象进行交互。 封装本质上是一种管理让用户更方便使用类。比如对于电脑这样一个复杂的设备提供给用户的就只有开关机键、通过键盘输入显示器USB插孔等让用户和计算机进行交互完成日常事务。但实际上电脑真正工作的却是CPU、显卡、内存等一些硬件元件。 对于计算机使用者而言不用关心内部核心部件比如主板上线路是如何布局的CPU内部是如何设计的等用户只需要知道怎么开机、怎么通过键盘和鼠标与计算机进行交互即可。因此计算机厂商在出厂时在外部套上壳子将内部实现细节隐藏起来仅仅对外提供开关机、鼠标以及键盘插孔等让用户可以与计算机进行交互即可。 在C语言中实现封装可以通过类将数据以及操作数据的方法进行有机结合通过访问权限来隐藏对象内部实现细节控制哪些方法可以在类外部直接被使用。   5. 类的作用域 类定义了一个新的作用域类的所有成员都在类的作用域中。在类体外定义成员时需要使用 ::作用域操作符指明成员属于哪个类域。   class Person { public:void PrintPersonInfo(); private:char _name[20];char _gender[3];int _age; }; // 这里需要指定PrintPersonInfo是属于Person这个类域 void Person::PrintPersonInfo() {cout _name _gender _age endl; } 6. 类的实例化  首先提一个问题。 请问以上代码是声明还是定义 答案是声明。 定义是要分配实际的空间的。以上变量并没有占用实际的空间。 什么是类的实例化 用类类型创建对象的过程称为类的实例化 1. 类是对对象进行描述的是一个模型一样的东西限定了类有哪些成员定义出一个类并没有分配实际的内存空间来存储它比如入学时填写的学生信息表表格就可以看成是一个 类来描述具体学生信息。 类就像谜语一样对谜底来进行描述谜底就是谜语的一个实例。 谜语年纪不大胡子一把主人来了就喊妈妈 谜底山羊 2. 一个类可以实例化出多个对象实例化出的对象 占用实际的物理空间存储类成员变量 class Person { public:char _name[20];char _gender[3];int _age; }; int main() {Person._age10;// 编译失败error C2059: 语法错误:“.”Person d1;//这样才是对的d1._age10; } Person类是没有空间的只有Person类实例化出的对象才有具体的年龄。 7.类对象模型 7.1 如何计算类对象的大小 class A { public:void PrintA(){cout _a endl;} private:char _a; }; 问题类中既可以有成员变量又可以有成员函数那么一个类的对象中包含了什么如何计算一个类的大小 7.2 类对象的存储方式猜测 1.对象中包含类的各个成员  缺陷每个对象中成员变量是不同的但是调用同一份函数如果按照此种方式存储当一 个类创建多个对象时每个对象中都会保存一份代码相同代码保存多次浪费空间。那么 如何解决呢 2.代码只保存一份在对象中保存存放代码的地址 3.只保存成员变量成员函数存放在公共的代码段 问题对于上述三种存储方式那计算机到底是按照那种方式来存储的 我们再通过对下面的不同对象分别获取大小来分析看下 int main() {cout sizeof(A1) endl;cout sizeof(A2) endl;cout sizeof(A3) endl; } 结论结论是使用第三种方式存储。一个类的大小实际就是该类中”成员变量”之和当然要注意内存对齐注意空类的大小空类比较特殊编译器给了空类一个字节来唯一标识这个类的对象。   7.3 结构体内存对齐规则 1. 第一个成员在与结构体偏移量为0的地址处。 2. 其他成员变量要对齐到某个数字对齐数的整数倍的地址处。 注意对齐数 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的对齐数为8 3. 结构体总大小为最大对齐数所有变量类型最大者与默认对齐参数取最小的整数倍。 4. 如果嵌套了结构体的情况嵌套的结构体对齐到自己的最大对齐数的整数倍处结构体的整体大小就是所有最大对齐数含嵌套结构体的对齐数的整数倍。 【面试题】 1. 结构体怎么对齐 为什么要进行内存对齐 2. 如何让结构体按照指定的对齐参数进行对齐能否按照3、4、5即任意字节对齐 3. 什么是大小端如何测试某台机器是大端还是小端有没有遇到过要考虑大小端的场景 http://t.csdnimg.cn/65cDF详情请看这篇文章1.6http://t.csdnimg.cn/65cDF 8.this指针 8.1 this指针的引出 我们先来定义一个日期类 Date   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(2024, 1, 28);d2.Init(2024, 1, 29);d1.Print();d2.Print();return 0; } 对于上述类有这样的一个问题 Date类中有 Init 与 Print 两个成员函数函数体中没有关于不同对象的区分那当d1调用 Init 函数时该函数是如何知道应该设置d1对象而不是设置d2对象呢 C中通过引入this指针解决该问题即C编译器给每个“非静态的成员函数“增加了一个隐藏的指针参数让该指针指向当前对象(函数运行时调用该函数的对象)在函数体中所有“成员变量”的操作都是通过该指针去访问。只不过所有的操作对用户是透明的即用户不需要来传递编译器自动完成。 8.2 this指针的特性 1. this指针的类型类类型* const即成员函数中不能给this指针赋值。 2. 只能在“成员函数”的内部使用 3. this指针本质上是“成员函数”的形参当对象调用成员函数时将对象地址作为实参传递给this形参。所以对象中不存储this指针。 这个其实也不难理解在学习C语言的时候我们用结构体建立线性表的时候会选择使用结构体在进行元素的插入时要把结构体的地址穿给函数其实和this指针没什么区别只是this指针时隐含的。 4. this指针是“成员函数”第一个隐含的指针形参一般情况由编译器通过ecx寄存器自动传 递不需要用户传递 8.3this指针【面试题】 1. this指针存在哪里 a.堆   b.栈   c.静态区   d.常量区   e.对象里面 答案b.栈区  因为this指针是作为形式参数的所以它是存在栈区的。有些编译器比如VS可能会用寄存器存储this指针会被频繁的访问寄存器是CPU内部存储器与CPU直接相连因此访问速度非常快所以使用寄存器是一个很好的选择。 我们看到const通常时认为是在常量区的但事实并非如此。 onst修饰符的作用是防止this指针被修改但它并不意味着this指针必须存储在常量区。常量区是存储只读数据的区域而this指针是一个可读写的指针因此它不能存储在常量区。 eg 2. this指针可以为空吗 答案this指针可以为空但不能设计对this指针的解引用操作。 看下面两个例题 1.下面程序编译运行结果是 A、编译报错 B、运行崩溃 C、正常运行   class A { public:void Print(){cout Print() endl;} private:int _a; }; int main() {A* p nullptr;p-Print();return 0; } 运行结果 因此答案是C、正常运行 本题考点是成员函数不在对象里面而是在公共代码区这里虽然有个p-,但他是不会解引用的这里p的价值是作为实参传递给this指针这里的this指针是空指针但没有解引用所以不会程序造成影响。 2.下面程序编译运行结果是 A、编译报错 B、运行崩溃 C、正常运行 class A { public:void PrintA(){cout _a endl;} private:int _a; }; int main() {A* p nullptr;p-PrintA();return 0; } 运行结果 因此答案是B、运行崩溃 这里p作为实参传递给this指针this指针此时为空此时还对this指针进行了解引用操作 this-a要通过this指针去访问a。所以这里就运行崩溃了。
http://www.zqtcl.cn/news/89528/

相关文章:

  • 淘客网站建设教程吉林企业网站模板建站哪个好
  • 网站域名备案地址国外平面设计分享网站有哪些
  • 网站的开发技术官方网站 建设情况汇报
  • 普通电脑可以做网站服务器吗常见的域名注册网站
  • 收费下载的wordpress网站游戏公司
  • 做网站送企业邮箱网站建设注意哪些事项
  • 福州网站建设哪里有网站建设方案
  • 企业网站备案要多少钱网站建设 从入门到精通pdf
  • 网站做我女朋友电商平台网站定制
  • 杭州网站建设出名吕梁营销型网站建设费用
  • 广东手机网站建设哪家专业吉林大学建设工程学院网站
  • 软文广告成功案例湖南网站seo优化
  • 建公司网站要多少钱易班网站建设基础
  • 网站建设技术进行开发分分彩做号网站
  • 一个网站如何赚钱alexa排名与什么有关系
  • 企业建设网站应如何申请中国制造加工网官网
  • 企业网站建设cms系统广源建设集团有限公司网站
  • 网站建设企业免费咨询石家庄楼盘最新消息
  • 一个网站如何做双语网站域名 空间申请表
  • 自建免费网站哪个好下载全网搜
  • 北京网站改版多少钱保护环境做网站素材
  • 网站建设还有需求么做网站 聊城
  • 专业网站优化哪家好昆山有建设网站的吗
  • 网站建设流程六个步骤kencms内容管理系统
  • 拖拽建站平台水土保持与生态建设网站
  • seo网站改版如何建立和设计公司的网站
  • 做网站的哪家比较好区块链开发与应用专业
  • 大学网站html模板下载工业设计参考网站
  • 取消网站备案号立陶宛和中国最新消息
  • 南京网站建设南京做网站能赚钱吗