asp开发网站详细步骤中国软件外包公司排行

张小明 2026/1/11 9:18:05
asp开发网站详细步骤,中国软件外包公司排行,中国建设银行官网登录入口手机版,南阳东莞网站建设公司类和对象(上) 类定义格式 • 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进行投诉反馈,一经查实,立即删除!

江西住建云网站网页设计流程图绘制

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请生成一个自动化测试脚本,比较以下5种Node.js安装方法在Ubuntu 22.04上的耗时:1.apt官方源 2.NodeSource源 3.nvm安装 4.二进制包安装 5.Docker容器。脚本应…

张小明 2026/1/9 17:33:23 网站建设

夏天做哪些网站致富2023年央选职位表

Win11系统.NET Framework 3.5离线安装终极指南 【免费下载链接】已解决Win11离线安装.NETFramework3.5完全指南 【已解决】Win11离线安装.NET Framework 3.5完全指南 项目地址: https://gitcode.com/Resource-Bundle-Collection/d5cb0 你是否在为Windows 11系统上运行老…

张小明 2026/1/9 0:29:44 网站建设

网站建设公司源码网站备案幕布照规范

文章目录Day 41 Dataset 与 DataLoadertorchvision 模块速览Step 1 定义 transforms 管道一、Dataset:定义“单份数据”1. 图片观察2. 两个必须的魔术方法__getitem__:让对象支持索引__len__:让对象支持 len()3. 自定义 Dataset 的伪代码二…

张小明 2026/1/9 7:33:39 网站建设

企业网站宽度礼仪策划网站建设

AutoML:自动化AI Agent的模型选择与优化 关键词:AutoML、自动化机器学习、模型选择、超参数优化、AI Agent、神经网络架构搜索、元学习 摘要:本文深入探讨了AutoML(自动化机器学习)技术在AI Agent开发中的应用&#xf…

张小明 2026/1/8 18:00:39 网站建设

阿里巴巴有几个网站是做外贸的网站用的什么字体

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个电商网站SSL错误模拟与修复演示项目。包含:1. 模拟典型SSL错误场景 2. 分步骤展示排查过程 3. 提供多种修复方案对比 4. 集成自动化测试验证。要求使用真实证书…

张小明 2026/1/8 20:59:11 网站建设

长沙正规网站制作公司班级网页设计素材

想不想把B站上那些惊艳的Hi-Res高解析度音频保存到本地随时欣赏?今天就来分享一个超实用的B站视频下载器使用攻略,让你轻松获取高品质音轨!BilibiliDown这款开源工具专门为B站用户设计,支持多平台运行,无论是Windows、…

张小明 2026/1/8 20:58:35 网站建设