游戏网站建设公司机械加工网格刀厂家

张小明 2026/1/9 17:00:05
游戏网站建设公司,机械加工网格刀厂家,商城网站要怎样设计,wordpress中文转拼音目录 1.再探构造函数 2.类型转换 3.static成员 4.友元 5.内部类 6.匿名对象 7.对象拷贝时编译器的优化 1.再探构造函数 ●之前我们实现构造函数时#xff0c;初始化成员变量主要使用函数体内赋值#xff0c;构造函数初始化还有一种方式——初始化列表#xff0c;初始…目录1.再探构造函数2.类型转换3.static成员4.友元5.内部类6.匿名对象7.对象拷贝时编译器的优化1.再探构造函数●之前我们实现构造函数时初始化成员变量主要使用函数体内赋值构造函数初始化还有一种方式——初始化列表初始化列表的使用方式是以一个冒号开始接着是一个以逗号分割的数据成员列表每个“成员变量”后跟一个放在括号中的初始值或表达式●每个成员变量在初始化列表中只能出现一次语法理解上初始化列表可以认为是每个成员变量定义初始化的地方●引用成员变量const成员变量没有默认构造的类类型变量必须放在初始化列表位置进行初始化否则会编译报错●C11支持在成员变量声明的位置给缺省值这个缺省值主要是给没有显示在初始化列表初始化的成员使用的●尽量使用初始列表初始化因为不在初始化列表初始化的成员也会走初始化列表如果这个成员在声明位置给了缺省值初始化列表会用这个缺省值初始化。若没有给缺省值对于没有显示在初始化列表初始化的内置类型成员是否初始化取决于编译器C并无规定。对于没有显示在初始化列表初始化的自定义类型成员会调用这个成员类型的默认构造函数若没有默认构造函数会编译错误●初始化列表中按照成员变量在类中声明顺序进行初始化跟成员在初始化列表出现的先后顺序无关。建议声明顺序与初始化列表顺序保持一致初始化列表总结无论是否写初始化列表每个构造函数都有初始化列表无论是否在初始化列表显示初始化成员变量每个成员变量都要走初始化列表初始化class Time{public:Time(int hour):hour(hour){coutTime()endl;}private:int _hour;};class Date{public:Date(int x,int year1,int month1,int day1):_year(year),_month(month),_day(day),_t(12),_ref(x),_n(1){}void Print() const{cout_year/_month/_dayendl;private:int _year;int _month;int _day;Time _t;//无默认构造int _ref;//必须初始化引用const int _n;//必须初始化常量限定类型的对象}int main(){int i0;Date d1(i);d1.Print();return 0;}class Time{public:Time(int hour):hour(hour){coutTime()endl;}private:int _hour;};class Date{public:Date():_month(2){coutDate()endl;}void Print() const{cout_year/_month/_dayendl;}private:// 这里不是初始化这里给的是缺省值这个缺省值是给初始化列表的//如果初始化列表没有显示初始化默认就会用这个缺省值初始化int _year1;int _month1;int _day;Time _t1;const int _n1;int *_ptr(int *)malloc(12);};下面的程序输DA、输出1 1B、输出2 2C、编译报错D、输出1 随机值E、输出1 2F、输出2 1class A{public:A(int a):_a1(a),_a2(_a1){}void Print(){cout_a1 _a2endl;}private://初始化列表按声明顺序初始化int _a22;int _a12;};int main(){A aa(1);aa.Print();}2.类型转换●C支持内置类型隐式转换为类类型对象需要有相关内置类型为参数的构造函数●构造函数前面加explicit就不再支持隐式类型转换●类类型的对象之间也可以隐式转换需要对应的构造函数支持class A{public://构造函数explicit就不再支持隐式类型转换//explicit Aint a1A(int a1):_a1(a1){}//explicit Aint a1,int a2Aint a1,int a2:_a1(a1),_a2(a2){}void Print(){cout_a1 _a2endl;}int Get() const{return a1a2;}private:int _a11;int _a22;};class B{public:B(const A a):_b(a.Get()){}private:int _b0;};int main(){//1构造一个A的临时对象再用这个临时对象拷贝a1//编译器遇到连续构造拷贝构造-优化为直接构造A a11;a1.Print();const A a21;//C11后支持多参数转换A a3{2,2};//a3隐式类型转换为b对象B b1a3;const B b2a3;return 0;}3.static成员●用static修饰的成员变量称之为静态成员变量静态成员变量一定要在类外进行初始化●静态成员变量为所有类对象所共享不属于某个具体的对象不存在对象中存放在静态区●用static修饰的成员函数称之为静态成员函数静态成员函数没有this指针●静态成员函数中可以访问其他的静态成员但是不能访问非静态因为没有this指针●非静态的成员函数可以访问任意的静态成员变量和静态成员函数●突破类域就可以访问静态成员可以通过类名静态成员或对象.静态成员来访问静态成员变量和静态成员函数●静态成员也是类的成员受public、protected、private访问限定符的限制●静态成员变量不能在声明位置给缺省值初始化因为缺省值时个构造函数初始化列表的静态成员变量不属于某个变量不走构造函数初始化列表class A{public:A(){_scnt;}A(const At){_scnt;}~A(){--_scnt;}static int GetConunt(){return _scnt;}private://类内声明static int _scnt;};//类外初始化int A::_scnt0;int main(){coutA::GetCount()endl;A a1,a2;A a3(a1);coutA::GetCount()endl;couta1.GetCount()endl;return 0;}求123...n要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句A?B:C。数据范围 0n≤2000n≤200//法一class Sum{public:Sum(){_re_i;_i;}static int Get(){return _re;}private:static int _i;static int _re;};int Sum::_i1;int Sum::_ret0;class Solution{public:int Sum_Solution(int n){Sum arr[n];return Sum::Get();}};4.友元●友元提供了一种突破类访问限定符封装的方式友元函数和友元类在函数声明或者类声明的前面加friend并且把友元声明放到一个类里面●外部友元函数可访问类的私有和保护成员友元函数仅仅是一种声明他不是类的成员函数●友元函数可以在类定义的任何地方声明不受类访问限定符限制●一个函数可以是多个类的友元函数●友元类中的成员函数都可以是另一个类中的友元函数都可以访问另一个类中的私有和保护成员●友元类的关系是单向的不具有交换性如A类是B类的友元但B类不是A类的友元●友元关系不能传递若A是B的友元B是C的友元但A不是C的友元●有时提供了便利。但友元会增加耦合性破坏了封装所以友元不宜多用//前置声明防止编译器不认识在A友元声明中的B类class B;class A{//友元声明friend void func(const Aa,const Bb);private:int _a11;int _a22;};class B{// 友元声明friend void func(const Aa,const B b);private:int _b13;int _b24;};void func(const Aa,const Bb){couta._a1endl;coutb._b1endl;}int main(){A a;B b;func(a,b);return 0;}class A{//友元声明friend class B;private:int _a11;int _a22;};class B{public:void func1(const Aa){couta._a1endl;cout_b1endl;}void func2(const A a){couta._a2endl;cout_b2endl;}private:int _b13;int _b24;};int main(){A a;B b;b.func1(a);b.func2(a);return 0;}5.内部类●如果一个类定义在另一个类的内部这个类叫做内部类。内部类是一个独立的类跟定义在全局相比它只是受外部类类域和访问限定符限制所以外部类定义的对象中不包含内部类●内部类默认是外部类的友元类●内部类本质是一种封装当A类跟B类紧密关联A类实现出来主要就是给B类使用那么可以考率把A类设计为B的内部类如果放到private/protected位置那么A类就是B类的专属内部类其它地方都用不了class A{private:static int _k;int _h1;public:class B{//B默认是A的友元public:void func(const A a){cout_kendl;couta._hendl;}int _b1;};};int A::_k1;int main(){coutsizeof(A)endl;A::B b;A a;b.func(a);return 0;}求123...n要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句A?B:C。数据范围 0n≤2000n≤200//法二使用内部类class Solution {private://类内声明static int i;static int cnt;class Sum{public:Sum(){cnti;i;}};public:int Sum_Solution(int n) {Sum a[n];return cnt;}};//类外初始化int Solution::i1;int Solution::cnt0;6.匿名对象●用类型实参定义出来的对象叫做匿名对象相比之前我们定义的类型对象名实参定义出来的叫有名对象●匿名对象声明周期只在当前一行一般临时定义一个对象当前用一个即可就可以定义匿名对象class A{public:A(int a0):_a(a){coutA(int a)endl;}~A(){cout~A()endl;}private:int _a;};class Solution{public:int Sum_Solution(int n){//……return n;}};int main(){A a1;//不能如下定义对象因为编译器无法识别下面是一个函数声明还是对象定义//A a1//但是我们可以这么定义匿名对象匿名对象的特点不用取名字//但是它的生命周期只有这一行我们可以看到下一行它就会自动调用析构函数AA1A a22//匿名对象在这样场景下就好用Solution().Sum_Solution(10);return 0;}7.对象拷贝时编译器的优化●现代编译器会为了尽可能提高程序的效率在不影响正确性的情况下会尽可能减少一些传参和返回值的过程中可以省略的拷贝●如何优化C标准并没有严格规定各个编译器会根据情况自行处理。当前主流的相对新的编译器对应连续一个表达式步骤中的连续拷贝会进行合并优化有些更新更“激进”的编译器还会进行跨行表达式的合并优化●linux下可以将下面代码拷贝到test.cpp文件编译用g test.cpp -fno_elide-constructors的方式关闭构造相关的优化class A{public:A(int a0):_a1(a){coutA(int a)endl;}A(const Aa):_a1(a._a1){coutA(const A a)endl;}A operator(const A a){coutA operator(const A a)endl;if(this!a){_a1a.a1;}return *this;}~A(){cout~A()endl;}private:int _a11;};void f1(A a){}A f2(){A a;return a;}int main(){//传值传参//构造拷贝构造A a1;f1(a1);coutendl;//隐式类型连续构造拷贝构造-优化为直接构造f1(1);//一个表达式中连续构造拷贝构造-优化为一个构造f1(A(2));coutendl;//传值返回//不优化的情况下传值返回编译器会生成一个拷贝返回对象的临时对象作为函数调用表达式的返回值//无优化vs2019 debug//一些编译器会优化得更厉害将构造的局部对象和拷贝构造的临时对象优化为直接构造vs2022 debugf2();coutendl;//返回时一个表达式中连续构造构造拷贝构造-优化一个拷贝构造vs2019 debug//一些编译器会优化得更厉害进行跨行合并优化将构造的局部对象a和拷贝的临时对象和接收返回值a2优化为一个直接构造vs2022 debug)A a2f2();coutendl;//一个表达式中开始构造中间拷贝构造赋值重载-无法优化vs2019 debug//一些编译器会优化得更厉害将构造的局部对象和拷贝构造的临时对象优化为直接构造vs2022 debugreturn 0}
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

制作个人业务网站更改网站模板

加强版魔术轮胎公式模型MagicFormula车辆动力学轮胎动力学Carsim联合仿真Matlab和Simulink 软件使用:Matlab/Simulink/Carsim 适用场景:采用模块化建模方法搭建非线性魔术轮胎模型。 魔术轮胎模型参数严选自Carsim专业软件,参数选取有理有据&…

张小明 2026/1/8 6:21:55 网站建设

个人网站备案名称举例高端网站建设的介绍

终极指南:用FFXIV TexTools打造你的专属FF14角色外观 【免费下载链接】FFXIV_TexTools_UI 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_TexTools_UI 想要在《最终幻想14》中展现独一无二的个性风格吗?FFXIV TexTools这款专业的游戏模型与…

张小明 2026/1/7 19:40:12 网站建设

做微信公众号第三网站公司网站数媒设计制作

LangFlow辩论赛立论陈词生成器 在高校辩论赛备赛过程中,一个常见的痛点是:面对全新的辩题,团队需要花费大量时间撰写结构严谨、逻辑清晰的立论陈词。尤其是初学者,常常陷入“不知道从何说起”或“写出来像流水账”的困境。如果能有…

张小明 2026/1/8 7:25:51 网站建设

网站的关键词搜索怎么做wordpress html5 音乐播放器

高校宿舍管理 目录 基于springboot vue高校宿舍管理系统 一、前言 二、系统功能演示 详细视频演示 三、技术选型 四、其他项目参考 五、代码参考 六、测试参考 七、最新计算机毕设选题推荐 八、源码获取: 基于springboot vue高校宿舍管理系统 一、前言…

张小明 2026/1/7 23:18:45 网站建设

济南网站建设公网站建设服务器的选择方式包括哪些

Seed-Coder-8B-Base:本地化代码补全新利器 在智能家居设备日益复杂的今天,确保无线连接的稳定性已成为一大设计挑战。而就在这个背景下,一款名为 MT7697 的芯片悄然走入了物联网开发者的视野——它不仅支持 Wi-Fi 和蓝牙双模通信,…

张小明 2026/1/8 0:49:29 网站建设

比较商务网站的营销策略视频网站开发教程

Vue 官方中文翻译项目:3步开启无障碍学习之旅 【免费下载链接】docs-zh-cn Vue 文档官方中文翻译 | Official Chinese translation for Vue docs 项目地址: https://gitcode.com/gh_mirrors/do/docs-zh-cn 还在为英文技术文档而头疼吗&#xff1f…

张小明 2026/1/8 2:21:24 网站建设