wordpress版本更新南宁网站优化推广方案

张小明 2025/12/28 2:32:08
wordpress版本更新,南宁网站优化推广方案,南京网站推广,电话百度类和对象(上) 类定义格式 • class为定义类的关键字#xff0c;Stack为类的名字#xff0c;{}中为类的主体#xff0c;注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员#xff1a;类中的变量称为类的属性或成员变量; 类中的函数称为类的⽅法或者成员函数。 • 为…类和对象(上)类定义格式• class为定义类的关键字Stack为类的名字{}中为类的主体注意类定义结束时后⾯分号不能省略。类体中内容称为类的成员类中的变量称为类的属性或成员变量; 类中的函数称为类的⽅法或者成员函数。• 为了区分成员变量⼀般习惯上成员变量会加⼀个特殊标识如成员变量前⾯或者后⾯加_ 或者 m开头注意C中这个并不是强制的只是⼀些惯例具体看公司的要求。• C中struct也可以定义类C兼容C中struct的⽤法同时struct升级成了类明显的变化是struct中可以定义函数⼀般情况下我们还是推荐⽤class定义类。• 定义在类⾯的成员函数默认为inline。#includeiostream 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; } 27 int Top() 28 { 29 assert(top 0); 30 31 return array[top - 1]; 32 } 33 34 void Destroy() 35 { 36 free(array); 37 array nullptr; 38 top capacity 0; 39 } 40 41 private: 42 // 成员变量 43 int* array; 44 size_t capacity; 45 size_t top; 46 }; // 分号不能省略 47 48 int main() 49 { 50 Stack st; 51 st.Init(); 52 st.Push(1); 53 st.Push(2); 54 55 cout st.Top() endl; 56 57 st.Destroy(); 58 59 return 0; 60 }访问限定符• C⼀种实现封装的⽅式⽤类将对象的属性与⽅法结合在⼀块让对象更加完善通过访问权限选择性的将其接⼝提供给外部的⽤⼾使⽤。• public修饰的成员在类外可以直接被访问protected和private修饰的成员在类外不能直接被访问protected和private是⼀样的以后继承章节才能体现出他们的区别。• 访问权限作⽤域从该访问限定符出现的位置开始直到下⼀个访问限定符出现时为⽌如果后⾯没有访问限定符作⽤域就到 }即类结束。• class定义成员没有被访问限定符修饰时默认为privatestruct默认为public。• ⼀般成员变量都会被限制为private/protected需要给别⼈使⽤的成员函数会放为public。类域• 类定义了⼀个新的作⽤域类的所有成员都在类的作⽤域中在类体外定义成员时需要使⽤ :: 作⽤域操作符指明成员属于哪个类域。• 类域影响的是编译的查找规则下⾯程序中Init如果不指定类域Stack那么编译器就把Init当成全局函数那么编译时找不到array等成员的声明/定义在哪⾥就会报错。指定类域Stack就是知道Init是成员函数当前域找不到的array等成员就会到类域中去查找。#includeiostream using namespace std; class Stack { public: // 成员函数 void Init(int n 4); private: // 成员变量 int* array; size_t capacity; size_t top; }; // 声明和定义分离需要指定类域 void Stack::Init(int n) { array (int*)malloc(sizeof(int) * n); if (nullptr array) { perror(malloc申请空间失败); return; } capacity n; top 0; } int main() { Stack st; st.Init(); return 0; }上⾯的程序运⾏后我们看到没有成员变量的B和C类对象的⼤⼩是1为什么没有成员变量还要给1个字节呢因为如果⼀个字节都不给怎么表⽰对象存在过呢所以这⾥给1字节纯粹是为了占位标识对象存在。内存对⻬规则• 第⼀个成员在与结构体偏移量为0的地址处。• 其他成员变量要对⻬到某个数字对⻬数的整数倍的地址处。• 注意对⻬数 编译器默认的⼀个对⻬数 与 该成员⼤⼩的较⼩值。• VS中默认的对⻬数为8• 结构体总⼤⼩为最⼤对⻬数所有变量类型最⼤者与默认对⻬参数取最⼩的整数倍。• 如果嵌套了结构体的情况嵌套的结构体对⻬到⾃⼰的最⼤对⻬数的整数倍处结构体的整体⼤⼩就是所有最⼤对⻬数含嵌套结构体的对⻬数的整数倍。内存对齐效率更高一点因为如果要单独读取某个数据的时候只需要读取一遍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指针访问的如Init函数中给_year赋值 this-_year year;• C规定不能在实参和形参的位置显⽰的写this指针(编译时编译器会处理)但是可以在函数体内显⽰使⽤this指针。#includeiostream using namespace std; class Date { public: // 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; } void Print() { cout _year / _month / _day endl; } private: // 这⾥只是声明没有开空间 int _year; int _month; int _day; }; int main() { // Date类实例化出对象d1和d2 Date d1; Date d2; // d1.Init(d1, 2024, 3, 31); d1.Init(2024, 3, 31); d1.Print(); d2.Init(2024, 7, 5); d2.Print(); return 0; }这段代码看起来有问题但让我先分析一下int main() { A* p nullptr; // 创建一个指向A类的空指针 p-Print(); // 通过空指针调用成员函数 return 0; }代码分析问题所在p被初始化为nullptr空指针p-Print()试图通过空指针调用成员函数运行结果理论上这会导致未定义行为通常会导致程序崩溃段错误但实际上可能运行成功的原因成员函数的调用机制p-Print()在编译时被转换为A::Print(p)Print函数没有访问成员变量函数内部没有使用this指针访问数据成员编译器优化由于不需要访问对象数据函数可以正常执行验证测试class A { public: void Print() { cout A::Print() endl; // 如果加上这行就会崩溃 // cout _a endl; // 访问成员变量需要有效的this指针 } void PrintWithData() { cout Data: _a endl; // 这里会崩溃 } private: int _a 10; }; int main() { A* p nullptr; p-Print(); // 可能正常运行 // p-PrintWithData(); // 一定会崩溃 return 0; }重要结论这是未定义行为不要在实际代码中这样写虽然可能侥幸运行成功但依赖于编译器和具体实现安全的做法确保指针不为空再调用成员函数这是一种危险的编程实践应该避免this指针存在内存哪个区域的 ()A. 栈 B.堆 C.静态区 D.常量区 E.对象⾥⾯正确答案是A. 栈详细解释this指针的本质this是一个隐式的函数参数当调用成员函数时编译器自动将对象的地址作为第一个参数传递示例说明class MyClass { public: void print() { // 编译器实际上将 this 作为第一个参数传递 // void print(MyClass* this); } }; int main() { MyClass obj; obj.print(); // 相当于 print(obj); MyClass* ptr new MyClass(); ptr-print(); // 相当于 print(ptr); return 0; }内存区域分析栈this指针本身作为函数参数存储在栈中 ✓堆如果对象是用new创建的对象本身在堆中但this指针仍在栈中静态区存储全局变量和静态变量常量区存储字符串常量等对象里面this指向对象但本身不在对象内部函数调用时的内存布局栈帧stack frame | 返回地址 | | 参数n | | ... | | 参数1 | ← this指针在这里作为第一个隐式参数 | 局部变量|总结this指针是成员函数的隐式参数与其他函数参数一样存储在栈中。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

鑫瀚通网站建设上海cms建站系统

你是谁? 我是多才多艺的文学家、书法家和画家,我是苏东坡,我…… 这是微调后大模型的回答,随着人工智能的发展,虚拟角色不再只是冰冷的对话机器,而是可以承载历史人物气质、知识体系乃至精神风貌的数字化身…

张小明 2025/12/27 2:37:48 网站建设

网站开发宣传沈阳做网站优化哪家好

一、为什么我的论文总被标"AI生成"?你是不是也遇到这些崩溃瞬间... "明明自己改了三遍,维普查重还是显示AIGC率35%..." "导师指着查重报告问:这段是不是ChatGPT写的?" "答辩在即,…

张小明 2025/12/26 19:04:51 网站建设

云南网站制作价格360网站提交收录入口

基于MT7697的蓝牙5.0音频模组在智能音箱中的稳定性设计实践在一款中高端智能音箱的研发后期,团队突然发现:设备在厨房与客厅之间移动时,音频断续频繁,重连延迟高达3~5秒。用户反馈“像老式收音机”,退货率悄然上升。这…

张小明 2025/12/27 20:06:29 网站建设

网站建网站建设seo帮帮您小程序发布要多少钱

原子在外部场中的行为及时间相关微扰理论 1. 原子在外部磁场中的行为 在研究原子在外部磁场中的行为时,我们首先关注氢原子在弱磁场中的情况。当对氢原子施加弱磁场 (B) 时,(n = 2) 态的 (2s_{1/2}) 和 (2p_{1/2}) 会出现不同的塞曼分裂,从而打破简并性。 在处理塞曼效应…

张小明 2025/12/27 18:59:52 网站建设

深圳 建网站信息网站怎么做

温馨提示:文末有联系方式宏程序自动创建工具V5简介宏程序自动生成器V5是一款专为CNC数控加工中心打造的智能计算软件,集成了丰富的加工功能模块,内容全面,操作简便。 无论是从事数控编程、加工中心操作,还是模具设计的…

张小明 2025/12/25 13:34:03 网站建设

用asp做的网站打开页面很慢做网站应该先从什么地方开始

Wan2.2-T2V-5B能否生成历史事件重现?文博数字化尝试 你有没有想过,仅凭一段古籍里的文字描述,就能“复活”千年前的市井烟火? 比如《梦溪笔谈》中一句“街鼓鸣,百官启行”,能不能变成一段清晨长安城坊门开启…

张小明 2025/12/27 18:35:23 网站建设