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

门户网站建设公司甘肃省建筑信息平台

门户网站建设公司,甘肃省建筑信息平台,偃师网站建设,公司活动策划方案怎么做一、this 关键字1. 什么是 this#xff1f;this 是 C 中的一个隐式指针#xff0c;它指向当前对象#xff08;即调用成员函数的对象#xff09;#xff0c;在成员函数内部使用#xff0c;用于引用调用该函数的对象。每个类的非静态成员函数内部都可以使用 this。使用 thi…一、this 关键字1. 什么是 thisthis 是 C 中的一个隐式指针它指向当前对象即调用成员函数的对象在成员函数内部使用用于引用调用该函数的对象。每个类的非静态成员函数内部都可以使用 this。使用 this 可以明确指出成员函数正在操作的是哪个对象的数据成员。2. 为什么需要 this当成员函数的参数名与成员变量名相同时可以用 this 来区分。示例代码 #include iostream using namespace std;class Person { private:string name;int age;public:// 构造函数参数名与成员变量名相同Person(string name, int age) {this-name name; // 用 this 区分成员变量和参数this-age age;}void printInfo() {// this 可以省略但显式使用更清晰cout Name: this-name , Age: this-age endl;}// 返回当前对象的引用用于链式调用Person setName(string name) {this-name name;return *this; // 返回当前对象本身} };int main() {Person p(Alice, 25);p.printInfo(); // 输出: Name: Alice, Age: 25// 链式调用p.setName(Bob).printInfo(); // 输出: Name: Bob, Age: 25return 0; }代码解释在构造函数中参数名 name 和 age 与成员变量同名用 this-name 表示成员变量。printInfo() 中 this 可以省略但显式使用让代码更清晰。setName() 返回 *this即当前对象的引用支持链式调用。3. this 的其他用途传递当前对象给其他函数在成员函数中返回当前对象本身解决局部变量与成员变量同名的问题示例 class Example {int value; public:Example(int value) {this-value value; // 区分成员变量和参数}void show() {cout Value: value endl; // 等价于 this-value}Example increment() {this-value; // 修改当前对象的成员return *this; // 返回当前对象本身} };4. this 的注意事项this 是指针不是引用*this 才是当前对象的引用静态成员函数中没有 this因为静态函数不属于任何对象不要随意返回 this 的指针可能导致悬空指针 二、new 关键字1. 什么是 newnew 是 C 中用于动态内存分配的运算符它在堆heap上创建对象并返回指针。2. 为什么需要 new在程序运行时而非编译时决定内存分配创建的对象生命周期不受作用域限制可以创建大型对象栈空间可能不足3. 基本用法示例代码 #include iostream using namespace std;class Dog {string name;int age; public:Dog(string n, int a) : name(n), age(a) {}void bark() {cout name says: Woof! Im age years old. endl;}~Dog() {cout name is being destroyed. endl;} };int main() {// 在堆上创建 Dog 对象Dog* myDog new Dog(Buddy, 3);myDog-bark(); // 输出: Buddy says: Woof! Im 3 years old.// 必须手动释放内存delete myDog; // 输出: Buddy is being destroyed.return 0; }代码解释new Dog(Buddy, 3) 在堆上创建对象返回指向它的指针。通过指针访问成员用 - 运算符。delete 释放内存并调用析构函数。4. new 的高级用法动态数组分配 int main() {// 动态分配包含 5 个 int 的数组int* arr new int[5];for (int i 0; i 5; i) {arr[i] i * 10; // 赋值}for (int i 0; i 5; i) {cout arr[i] ; // 输出: 0 10 20 30 40}cout endl;// 释放数组要用 delete[]delete[] arr;return 0; }注意事项数组必须用 delete[] 释放单个对象用 delete。忘记释放会导致内存泄漏。5. new 的替代方案现代 C使用智能指针推荐 #include memoryint main() {// 自动管理内存的 unique_ptrunique_ptrDog smartDog(new Dog(Max, 4));smartDog-bark();// 不需要手动 delete离开作用域自动释放// 更安全的 make_unique (C14)auto smartDog2 make_uniqueDog(Charlie, 5);smartDog2-bark();return 0; }6. new 的注意事项必须配对使用 delete int* p new int; // 分配 *p 10; delete p; // 释放避免内存泄漏 void leakyFunction() {int* leak new int[100]; // 分配但未释放// 如果中间发生异常delete 永远不会执行 } // 内存泄漏不要重复释放 int* p new int; delete p; // 正确 delete p; // 错误未定义行为检查分配是否成功现代 C 中 new 失败会抛出 std::bad_alloc 异常初始化分配的内存 // C11 统一初始化 int* p1 new int{42}; // 值初始化为 42// 默认初始化值不确定 int* p2 new int;// 动态数组初始化为 0 int* arr new int[10](); // 所有元素初始化为 0三、总结对比特性this 关键字new 运算符作用指向当前对象动态分配内存返回值当前对象的指针新分配内存的指针使用场景成员函数中访问当前对象需要运行时决定内存分配时内存位置不适用是指针堆heap生命周期不适用直到显式 delete 或程序结束错误风险误用可能导致逻辑错误忘记释放导致内存泄漏最佳实践建议this 使用建议在成员变量和参数同名时使用需要返回当前对象时链式调用避免过度使用保持代码清晰new 使用建议优先考虑栈分配或智能指针如果必须用 new确保有对应的 delete对于数组使用 std::vector 代替 new[]在 C11 中优先使用 std::make_unique/std::make_shared现代 C 趋势减少裸 new/delete 的使用使用 RAII资源获取即初始化原则依赖标准库容器和智能指针管理资源
http://www.pierceye.com/news/69700/

相关文章:

  • 网站建设与制作实验报告设计网站做什么内容好
  • 莆田外贸网站建设南京专业网站制作公司
  • 网站开发费待摊年限人被备案了会有什么后果
  • 网站备案ip地址十大免费网站推广平台
  • 网站的注册和登录怎么做深圳网站制作厂家
  • 黄页网站推广效果怎么样实用的wordpress插件
  • 网站建设与管理感想滨州 网站开发
  • jsp做的当当网站的文档网站程序开发教程
  • 定制类做网站多少钱wordpress标签云不显示图片
  • 新泰市建设局网站四川建设厅官网查询
  • 什么程序做网站在哪里找软件开发公司
  • 网站制作思路做外贸网站格式
  • 网站建设中企动力推荐wordpress index 漏洞
  • 企业网站优化服务商中国建筑第八工程局招聘信息
  • 网站打开wordpresswordpress小程序 标签
  • 如何更改公司网站内容驻马店网络
  • ftp修改网站稿定设计在线ps
  • 珠海网站制作公简单大气的网站
  • 管理系统中的计算机应用在线看seo网站
  • 唐山地区网站开发公司ssh网站开发的书籍
  • 怎么看网站做没做优化湘潭网站建设哪些公司
  • 网站空间商查询公司网站建设技术方案
  • 做美图网站有哪些东西吗网页截图快捷键ctrl加什么
  • 深圳网站建设公司wordpress主题 kratos
  • 网站无法做301重定向深圳网站营销seo电话
  • 广东两学一做网站网站备案变更 能让首页关闭 二级域名继续
  • 电子产品网站开发背景廉洁文化网站建设方案
  • 网站建设近义词广州建站服务
  • 做网站怎样赚卖流量有效推广网站
  • 网站建设进程方案开公司一年需要多少费用