妇联加强网站平台建设高端网站改版顾问

bicheng/2026/1/24 11:17:05/文章来源:
妇联加强网站平台建设,高端网站改版顾问,WordPress模板申报功能下载功能,wordpress后台去掉左上角1个wordpress更新目录 一、面向过程和面向对象初步认识 二、类的引入和定义 2.1类的引入 2.2类的定义 三、类的访问限定符及封装 3.1访问限定符 3.2封装 四、类的作用域 五、类的实例化 六、类的对象大小的计算 6.1如何计算对象的大小 6.2类对象的存储方式 七、类成员函数的thi…目录 一、面向过程和面向对象初步认识 二、类的引入和定义 2.1类的引入 2.2类的定义 三、类的访问限定符及封装 3.1访问限定符  3.2封装  四、类的作用域 五、类的实例化 六、类的对象大小的计算 6.1如何计算对象的大小 6.2类对象的存储方式  七、类成员函数的this指针 7.1this指针的引出 7.2this指针的特性 一、面向过程和面向对象初步认识 面向过程关注的是过程分析出求解问题的步骤通过函数调用逐步解决问题。 例如洗衣服 拿盆子——放水——放衣服——放洗衣粉——手搓——换水——手搓——拧干——晾衣服  我们知道C语言面向的是过程例如我们要得到两数之和的结果,那么得造一个和函数先进行传实参形参相加得到参数之和返回之和的值这就是得到两数之和的一个过程。 面向对象关注的是对象将一件事情拆分成不同的对象靠对象之间的交互完成。 还是洗衣服有四个对象人、衣服、洗衣粉、洗衣机  那么洗衣服过程人将衣服放入洗衣机、倒入洗衣粉启动洗衣机洗衣机就会完成洗衣过程人不需要关注洗衣机是如何洗衣服的。 那么照样我们也要得到两数之和的结果就不需要去实现函数了而是直接用函数就行这个函数是已经被实现的这就是直接使用对象不需要关注实现过程。 那么还有疑问的是对象之间的操作怎么看起来也是一个过程其实是不同角度产生的看法那么对于同一件事情洗衣服从过程来看这个衣服需要执行被洗的过程在乎的是怎么洗的过程而从对象来看只需要用洗衣机完成洗衣服怎么洗的过程不在乎。其实这就相当与面向对象是以更高的角度去看待面向过程。 我再从更高的角度去看待面向对象那么面向对象又可以看成面向过程。所以对于任何实现从不同角度既可以看成面向过程也可以看成面向对象 对于c我们将其看成面向对象的语言因为对标C语言c很多实现要比C语言简单的多不用造轮子(自己实现没必要去浪费时间做的函数当然你以更高的角度来看c实现的函数也可以看成过程 但是你得在更高的角度弄出点东西来不然也改变不了啥。 二、类的引入和定义 2.1类的引入 回顾C语言实现栈时需要有一个结构体存放定义的变量而具体的实现需要额外定义函数完成压栈、出栈、销毁栈等。那么在c中结构体不仅可以定义变量也可以定义函数了同样我们用栈来举个例子 #include iostream using namespace std;typedef int DataType; struct stack {//栈的初始化void Init(size_t capacity){_array (DataType*)malloc(sizeof(DataType*) * capacity);if (nullptr _array){perror(malloc fail);exit(-1);}_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(5);s.Push(1);s.Push(2);s.Push(3);cout s.Top() endl;s.Destroy();return 0; } 运行结果 从上面代码可以看出我们将变量的定义与函数的实现都放在结构体中且这些变量可以在函数中使用像这种将函数和变量都放在一个结构体中在这种情况下在c中我们称之为类也就是说C语言中的结构体在c中升级成了类当然类依然支持C语言中的结构体用法毕竟c兼容C语言嘛。那么接下来讲解类定义的详细用法 注意上述结构体的定义在c中更喜欢用class来代替其实struct和class还是有区别的在类的访问限定中会讲解。 2.2类的定义 形式规则 class className {//类体由成员函数和成员变量组成};//一定要注意后面的分号class为定义类的关键字className为类的名字{}中为类的主体注意类定义结束时后面分号不能省略。 类体中内容称为类的成员类中的变量称为称为类的属性或成员变量类中的函数称为类的方法或者成员函数 以上是类定义的形式规则但对于类中的成员函数定义和成员变量命名也有一定的规则。 成员函数的定义有两种方式 1.成员函数的声明和定义都放在类体中需要注意的是编译器可能会将其当成内联函数处理。 2.类声明放在.h文件中成员函数放在.cpp中注意成员函数名前需要加类名:: //声明放在类的头文件fun.h中 #include iostream using namespace std;class Person { public://显示基本信息void showinfo(); public:char* _name;char* _sex;int _age; };//定义放在类的实现文件中 #include fun.hvoid Person::showinfo() {cout _name - _sex - _age endl; }int main() {Person s;s._name (char*)张三;//由于张三是字面常量类型为const char*而_name为char*类型s._sex (char*)男;s._age 18;s.showinfo();return 0; } 运行结果 一般情况下最好采用第二种方式但在之后的讲解中为了方便可能会使用方式一。但在以后的工作中的话那尽量使用方式二 。 成员变量命名规则的建议 #include iostream using namespace std;class Date { public:void Init(int year){//这里的year到底是成员变量还是函数形参,虽然知道左边的year是定义的变量而右边的year是形参的year//但难免带来一种令人不友好的感觉year year;//所以一般建议定义的变量加上前缀或者后缀,对于我而言习惯加上前缀int _year year;int year_ year;int myear year;} private:int year;int _year;int year_;int myear; };int main() {Date d;d.Init(3);return 0; } 注意默认直接在类里面定义的函数就是inline函数不需要加inline关键字当然在编译时展不展开函数还是取决编译器 。 三、类的访问限定符及封装 3.1访问限定符  在上述代码中看到我们加了public、private这类符号是什么 像这类符号我们称之为访问限定符其实这是c实现封装方式的必要手段用类将对象的属性和方法结合在一块让对象更加完善再通过访问访问限定符选择性的将其接口提供给外部的用户使用。 那具体是啥意思访问限定符有哪些look 访问限定符用来限定类外是否能访问类里面的成员访问限定符分为三类public公有protected保护和private私有 访问限定符说明 1.public表示类外是可以访问类里面被public修饰的成员 2.protected和private表示类外不能直接访问类里面被这两个修饰的成员他们是类似的但还是有区别的在继承阶段会讲解。 3.访问权限作用域从该访问限定符出现的位置开始知道下一个访问限定符出现时为止如果后面没有访问限定符作用域就到 } 即类结束 4.上面我们提到了class和struct是有区别对于class其成员的默认访问权限为private而struct为public想想虽然在c中struct升级成了类但依然支持C语言struct的用法而C语言的struct成员都是可以直接被访问的不需要限定符。所以在这里struct的默认访问权限是public 注意访问限定符只在编译时有用当数据映射到内存后没有任何访问限定符上的区别  3.2封装  对于对象而言无非就三大特性封装、继承、多态。继承和多态后面的章节再说在类和对象阶段主要说的就是封装那么什么是封装呢 封装将数据和操作数据的方法进行有机结合隐藏对象的属性和实现细节仅对外公开接口来和对象进行交互封装本质上是一种管理让用户更方便实用类。说白了不就是用类将他们包起来再通过访问限定符是否对外提供接口来实现交互。 在现实中这个道理也是一样的像电脑里面的零件都是被封装的然后提供一个USB接口给用户使用。 四、类的作用域 在上面我们提到并给出了代码类中的函数长的声明和定义要分离分离定义的函数怎么与类中声明的函数进行联系呢跟命名空间一样类也是一个作用域类的所有成员在类的作用域中类外定义成员时需要使用::作用域操作 符指明成员属于那个类域 #include iostream using namespace std;class Person { public://打印基本信息void printpersoninfo(); public:char _name[20];char _gender[3];int _age; };//指明函数属于哪个类域 void Person::printpersoninfo() {cout _name - _gender - _age endl; }int main() {Person s;strcpy(s._name , 李四);strcpy(s._gender , 女);s._age 19;s.printpersoninfo();return 0; } 运行结果 五、类的实例化 仅仅有一个类不能对里面的内容进行访问而是要创建一个对象通过对象来对类中的成员进行访问。用类类型创建对象的过程称为类的实例化。 类是对对象进行描述的是一个模型一样的东西限定类有那些成员定义出一个类并没有分配实际的内存空间来存储它。必须实例化出对象才占有实际的物理空间存储类成员变量。且一个类可以实例化出多个对象。 比如房子设计图就是一个类设计图描述了房子的各种信息但是并没有为这些信息建造出一个实际的空间。而只有建造出了真正的房子才是实例化才分配了空间且通过设计图也可以建造出多个房子即实例化多个对象。再通过代码来比较。 #include iostream using namespace std;class Person { public://显示基本信息void printpersoninfo(); public:char _name[20];char _gender[3];int _age; };//指明函数属于哪个类域 void Person::printpersoninfo() {cout _name - _gender - _age endl; }int main() {Person s;//创建对象且实例化多个对象Person t;Person u;strcpy(s._name , 李四);strcpy(t._name , 王五);strcpy(u._name , 李六);strcpy(s._gender, 女);strcpy(t._gender, 男);strcpy(u._gender, 男);s._age 18;t._age 19;u._age 20;s.printpersoninfo();t.printpersoninfo();u.printpersoninfo();return 0; } 运行结果 六、类的对象大小的计算 6.1如何计算对象的大小 对于类中既有成员函数和成员变量那么计算大小时是不是他们都要算呢look #include iostream using namespace std; class A { public:void PrintA(){cout _a endl;} private:char _a; };int main() {A a1;cout sizeof(a1);//猜猜多大return 0; } 运行结果 通过结果发现大小只有1只计算了成员变量_a 的大小。这是怎么回事呢且看下面分析 6.2类对象的存储方式  以正常的理解当一个类实例化多个对象时对象与对象之间的成员变量、成员函数是互不干扰的但每个对象都会保存一份该成员函数的代码相同的代码保存了多份实例化了多份就会形成空间的浪费。 所以给了对象的新的存储方式对象中只保存成员变量而对于成员函数只保存一份放在公共代码区每个对象调用该函数时其实就是调用公共代码区的该函数。所以在上述计算大小时就不会算上成员函数。 再来看几个例子 空类 #include iostream using namespace std;class A3 {};int main() {cout sizeof(A3);return 0; } 运行结果 为什么也是1呢不应该是0吗明明是一个空类。  OK空类其实也可以实例化对象这是前提。既然可以实例化对象那么对象就会在内存分配空间该对象有地址存在只不过不存储任何数据。如果空类的大小为0表示该类没有任何成员或对象。这意味着该类不占用内存空间。所以为了标识该对象存在编译器规定该空类的大小为1 类中仅有成员函数 #include iostream using namespace std;class A2 { public:void f2() {} };int main() {cout sizeof(A2);return 0; } 运行结果 大小也是1根据上面的解释成员函数是放在公共代码区它们在内存中独立存在所以在计算大小时 相当于计算空类的大小。 注意计算类的大小依然遵守结构体内存对齐规则 七、类成员函数的this指针 7.1this指针的引出 #include iostream using namespace std;class Date { public:void Init(int year 2023, int month 11, int day 23)//给缺省值{_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(2023, 1, 11);d2.Init(2023, 1, 12);d1.print();d2.print();return 0; } 运行结果 对于上述类实例化两个对象在表面上两个对象都调用了Init函数时但是在深层函数怎么识别是谁调用 c引入了this指针来识别对象的调用c编译器给每个“非静态的成员函数”增加了一个隐藏的指针参数让该指针指向当前对象函数运行时调用该函数的对象在函数体中所有“成员变量”的操作都是通过该指针去访问。但要注意的是this指针的所有操作对于程序员而言是透明的即this指针不需要程序员来传递编译器会自动完成可以认为是祖师爷设定好的。 7.2this指针的特性 1.this指针的类型类类型* const,例如Date* const this。由于this被const修饰所以在成员函数中不能给this指针赋值。 2.只能在“成员函数”的内容使用 3.this指针本质上是“成员函数”的形参当对象调用成员函数时将对象地址作为实参传递给this形参。所以对象本身不存储this指针。 4.this指针是“成员函数”第一个隐含的指针形参一般情况由编译器通过ecx寄存器自动传递不需要用户传递。 其实上述代码的本质就是第二张图的形式对应着上述规则。注意的是在调用函数传实参、以及函数的形参中不能显示的将this指针写出来否则会报错但在成员函数中可以显示的写出。 【面试题】  1.this指针存在哪里 将上述代码转到反汇编后可以发现d1对象和d2对象存放到rcx寄存器。由此this指针在VS下存放在栈区的寄存器中。 2.this指针可以为空吗 先看代码1下面运行结果 A、编译报错 B、运行崩溃 C、正常运行 #include iostream using namespace std;class A { public:void Print(){cout Print() endl;} private:int _a; };int main() {A* p nullptr;p-Print();return 0; } 运行结果 答案是正常运行疑问的是p是空指针为什么可以访问Print函数 其实这是一个误区想想前面讲解的首先成员函数不是放在对象中而是在公共代码区其次在这里p并没有去访问Print函数但是如果没有访问该函数那又是怎么寻得该函数。在C语言中就知道了是在编译、链接阶段通过符号表来寻找函数名字所以在这里p的作用就是告诉编译器它属于A类然后在编译阶段A类中寻找是否存在Print函数。 代码2下面运行结果 A、编译报错 B、运行崩溃 C、正常运行 #include iostream using namespace std;class A { public:void Print(){cout _a endl;} private:int _a; };int main() {A* p nullptr;p-Print();return 0; } 运行结果 运行结果是崩溃的对比第一个代码修改了成员函数的输出且成员变量并没有初始化。本质上就是this-_a这个就是空指针访问了成员变量而空指针并不指向任何有效的对象因此其中的成员变量也是未定义的。  综上所述虽然成员函数的代码本身放在公共代码区但成员函数通常涉及对对象中的成员变量进行操作这可能导致问题。因此最好不要让this指针为空以避免潜在的未定义行为。 end~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/87225.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

正规的丹阳网站建设邯郸市中小学健康管理平台登录

解析 绿题照样不会qwq 一开始的想法是按位分类讨论 辛辛苦苦码了七十行 然后发现当一次性需要进多位的时候就炸了 qwq 关键要考虑到一点:异或就是不进位的加法 所以考虑u和v的差值,设为d 将其二进制分解,然后就是让其在对应的位进位即可 后…

建设个人信息网站企业培训公司有哪些

TX Text Control 支持VISUAL STUDIO 2022、.NET 5 和 .NET 6 支持 .NET WPF 应用程序的文档处理 将文档编辑、创建和 PDF 生成添加到您的 WPF 应用程序中。 视窗用户界面 功能齐全的文档编辑器 TX Text Control 是一款完全可编程的丰富编辑控件,它在专为 Visual Stu…

网站怎么做百度权重做淘宝有没有店小秘类型的网站

在 macOS 上设置 Redis 密码的步骤与在其他操作系统上大致相同,关键是要找到并编辑 Redis 配置文件,然后重启 Redis 服务。以下是详细步骤: 找到 Redis 配置文件:如果你是通过 Homebrew 安装的 Redis,配置文件通常位于…

做百度推广首先要做网站吗设计之家图片

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 所有的控件当中,除了label、edit、radio、combobox和button之外,另外一个用的比较多的控件就是grid,也可称之为…

网站建设购物商城专业网站运营设计

近年来,随着互联网发展,出现了各种各样的网站,web应用,网络极大方便了人们的生活,改变了人们生活方式。而随着网络的发展普及,网络安全问题也困扰着用户。 许多人都曾有过这样经历,网站上线后&…

兰州 网站建设公司哪家好电商网站有什么特点

这是我的ubutun版本号 在这个系统装桌面版微信很多功能不健全。搜索了很多方法,这个算是不错的一个法子。 1.添加仓库 首次使用时,你需要运行如下一条命令将移植仓库添加到系统中。 wget -O- https://deepin-wine.i-m.dev/setup.sh | sh 2.应用安装 …

网站的ftp怎么登陆成立一个公司需要多少钱

揭秘建筑类中级职称申报:是否能越过初级直接评审? 很多人想知道越过初级直接评审建筑类中级职称可以不? 关于越过初级职称/助理工程师直接申报建筑类中级职称,原则上是不行的,实际上分情况而定。如果你有二级建造师也…

可画在线设计网站制作游戏的软件app

随着新时代的到来,物联网和区块链技术的结合正在改变商业领域的运作模式。对于传统商家而言,如何利用区块链技术实现商业模式的转型和升级,成为了一个值得探讨的问题。本文将探讨新时代物联网区块链如何链接底层商业,并阐述传统商…

中国建设银行总行网站成都广告公司制作

方法 pthread_mutex_lock(mutex) pthread_mutex_trylock(mutex) pthread_mutex_unlock(mutex) 用法 线程可调用pthread_mutex_lock()来获取某个互斥量,如果该互斥量已经被其他线程加锁,则该线程将会被阻塞,直到互斥量被其他线程释放。 线程可调用pthread_mutex_trylock(…

网站建设服务收费营销网站设计公司招聘

导购APP、淘客机器人与淘客系统:全面对比与选择 在互联网购物的时代,导购APP、淘客机器人和微赚淘客系统成为了消费者们的三大重要工具。它们各具优势,但也存在一些问题。本文将为您详细对比这三种工具,帮助您在购物时做出最合适…

wordpress建站服务器选择怀化网站建设公司

今天分享的是Win10系统下MySQL的安装教程,打开MySQL官网,按步骤走呀~ 宝们安装MySQL后,需要简单回顾一下关系型数据库的介绍与历史(History of DataBase) 和 常见关系型数据库产品介绍 呀,后面就会进入正式…

威县网站建设网站建设先有域名然后呢

文章目录 定制repo(不再切换python和google源)前言各用各的repo定制repo2/repo3源码自动识别repo2/repo3项目完整解决方案: 定制repo(不再切换python和google源) 众知,Android/AOSP/ROM系统开发&#xff0c…

网站结构的规划与设计怎么做下载类网站

在 C# 中,Replace 是一个字符串操作方法,用于替换字符串中的指定字符或子字符串。它接受两个参数:要查找和替换的字符串。Replace 方法在源字符串中查找所有匹配的字符或子字符串,并用指定的替换字符串进行替换。 下面是 Replace…

免费的招聘网站磁力蜘蛛搜索引擎

前言 现在很多linux系统都可以使用高级包管理工具安装软件了,但是在像是 openkylin这些新系统中,好多软件包虽然有,但是因为其依赖的包还没有做好,所 以安装会提示你一大堆依赖错误。所以还是要自己来编译安装咯。安装前准备&…

dedecms关闭网站网站域名根目录

C入门之类和对象(中) 文章目录 C入门之类和对象(中)1. 类的6个默认对象2. 构造函数2.1 概念2.2 特性2.3 补丁 3. 析构函数3.1 概念3.2 特性3.3 总结 4. 拷贝构造函数4.1 概念4.2 特性4.3 总结 1. 类的6个默认对象 如果一个类中什么都没有,那么这个类就是一个空类。…

网站建设 上海网站特种作业证查询入口

问题背景: 最近入手了百问网的全志T113-Pro,用Emmc启动发现一张32GB的SD卡在烧录了百问网镜像 100ask-t113-pro_sdcard.img 的系统后,仅有200多M的存储空间。第一时间上百问网论坛看是否有板友也出现类似情况,发现了一个帖子正是描…

展览会建设网站平台的作用网站基本架构设计的主要步骤

想要搞 all in beng 就得到靠虚拟机了主流就是pve和esxi 其中我认为esxi>pve的 esxi不能使用emmc储存因为无法识别 esxi6.7以上时不支持螃蟹卡的所以想要新的esxi8.0就可能要换网卡,或者就安装6.7 esxi有很多已经封装好网卡驱动和 NVMe 驱动的镜像,如有需要可以自行百度,问我…

网站建设 朝阳区wordpress玩法

操作符分类: 算数操作符: - * / % //算数操作符 // int main() // { // // /除法 1.整数除法(除号两端都是整数) 2浮点数除法,除号的两端只要有一个小数就执行小数除法 // // 除法中,除数为0 // int a 7 / 2; /…

织梦做不了视频网站可以做视频剪辑兼职的网站

一. 需求 ⏹有一段文本,文本一共有7列。这7列文本之间的分隔符不相同 有一个空格的有多个空格的有Tab的jmw_state 和 method 之间用 & 连接 现在要求,将这段文本粘贴到Excel中,进行分列。并且需要将 jmw_state 和 method 也进行分列 也…

你做我评网站会自动查论文相似度吗合肥网页制作设计

最近在学习Asp.Net MVC, 一直是step by step地看官方文档。 想找个成熟的MVC开发的开源系统,系统学习一下MVC, 搜索了一下,惊喜的发现了Orchard. 这个是介绍 2011/01/21号发布的关于Orchard的介绍,说明Orchard还是一个非常新鲜的事物。以后会…