码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • C++,异常、转换函数、智能指针


    目录

    一、异常

    1 C++ 异常机制:

    2 使用try catch进行异常处理.

    3、c++ 已经内置标准异常类,专业用于抛出的语法中

    4 自定义异常:

    5 函数只抛出,不处理。让上层函数处理,并且上层函数还可以不处理,让上上层函数处理,以此类推。

    二、转换函数

    三、智能指针

    1 unique_ptr,

    2 shared_ptr

    3 weak_ptr


    一、异常

    1 C++ 异常机制:

            可以让程序在即将发生异常前被处理,不会让程序因为发生异常而终止。

    2 使用try catch进行异常处理.

    处理执行try块的代码,如果执行throw 数据, 则try中余下的代码都不执行,进行进入catch中执行,而catch中参数会收到throw 执行出的数据。catch执行结束后,程序从catch后面的代码继续执行

    抛出的该数据可以是基础类型,也可是对象.

    示例1: 抛出int型数据

    示例2:抛出字符串

    示例3:抛出对象

    该示例是一个不规范的示例,此处给出,只为讲清楚异常的机制

    3、c++ 已经内置标准异常类,专业用于抛出的语法中

    异常类使用时, 导入,并且异常类的名称空间为std

    示例1:抛出exception异常

    示例2:抛出invalid_argument异常

    该异常对象构造函数还字符串参数。

    4 自定义异常:

        一般继承exception来实现,理论上也可以通过继承exception的子类来实现

    5 函数只抛出,不处理。让上层函数处理,并且上层函数还可以不处理,让上上层函数处理,以此类推。

    示例1:

     在函数后面指定能抛出的异常数据类型

     指定抛出的是类时,实计抛出的可以是指定类和派生类的对象

        如果函数抛出throw()则表示不能抛出异常,该方式现在已经建议使用(11版本开始) const noexcept代替,就像前面使用const char* what() const noexcept , 表示不能抛出异常。

    二、转换函数

    1 概念:

    转换函数的实质就是运算符重载,只是重载的运算符不是内置的运算符而是类名这个特殊的自定义类型。

    2 自定义转换函数

    (1)语法形式:

    operator 类型名( )

    {

        实现转换的语句

    }

    (2)转换函数的基本规则:

    转换函数只能是成员函数,无返回值,空参数。

    不能定义到void的转换,也不允许转换成数组或者函数类型。

    转换常定义为const形式,原因是它并不改变数据成员的值。

    explicit关键字用来修饰类的构造函数,被修饰的构造函数的类,不能发生相应的隐式类型转换

    (3)示例:

    1. //源文件,测试文件
    2. #include
    3. using namespace std;
    4. class Integer {
    5. private:
    6.     int val;
    7. public:
    8.     Integer(int i=0) {
    9.         cout<<"Integer(int i)"<
    10.         this->val = i;
    11.     }
    12.     //转换函数
    13.     operator int() const {
    14.         cout<<"int()"<
    15.         return val;
    16.     }
    17.     void setVal(int val) {
    18.         this->val = val;
    19.     }
    20.     int getVal() {
    21.         return val;
    22.     }
    23. };
    24. int main() {
    25.     Integer i;// 触发 Integer(int u)
    26.     i.setVal(100);
    27.     int x = i;//等效书写 int x = (int)i; 触发int()。
    28.     cout<//100
    29.     Integer y = 200;// 触发Integer(int i)
    30.     cout<// 触发int()  200
    31.     return 0;
    32. }

    3 标准转换函数

    智能指针:

    只针对堆中对象。 类名 p=new 类名。

    1、unique_ptr:

    只允许一个指针指向对象,指针不指向堆中对象时,堆中对象被销毁。

    2、shared_ptr

    三、智能指针

        在C++11中有四种智能指针,auto_ptr,shared-ptr,unique_ptr和weak-ptr。其中auto_ptr有和多不足之处,在C++11中已经建议废弃使用。都是在memory头文件中声明的。名称空间为std

    1 unique_ptr,

    当变量销毁或变量的值置NULL后,指向的对象会销毁,该对象还只能一个指针指向它。

    该指针的操作

    (1) p->访问对象中的成员

    (2) p = NULL;

    (3) p.reset();//等效于 p = NULL

    (4) p.reset(new Demo); p指向新的堆中的对象, 不再指向之前的内容

    示例: unique_ptr

    2 shared_ptr

    在给shared_ptr分配内存时建议使用make_shared函数,这样最安全。make_shared会分配一个临时对象,而临时对象又会自动销毁,所以会有两次析构函数的执行。

    p1.reset()会使用p1不再指向对象。等效于p1=NULL

    p1.reset(new Demo),该指针指向新的对象了。

    3 weak_ptr

    可以保存一个“弱引用”,引用一个已经用shared_ptr管理的对象。

    weak_ptr可通过shared_ptr来初始化

    weak_ptr.expired()判断对象是否销毁,如果有返回0,没有返回1

    weak_ptr.lock()返回shared_ptr, 如果没有返回NULL

  • 相关阅读:
    java 泛型静态方法入参泛型类 和 RestTemplate 泛型返回
    计算机毕业设计Java校园墙系统(系统+源码+mysql数据库+lw文档)
    观测云产品更新 | 数据转发、监控器告警策略等优化
    【专精特新周报】专精特新“小巨人”科润智控上市;北交所首例!生物谷及责任人被纪律处分;北交所4家企业发布半年度业绩预告...
    测试员突破瓶颈指南,不看又废了一年
    C#选择排序(Selection Sort)算法
    基础 | 并发编程 - [Callable & FutureTask]
    java专项练习(评分)
    qt对于一个QWidget的所有事件
    代码随想录算法训练营第五十七天 | 动态规划 part 15 | 392.判断子序列、115.不同的子序列
  • 原文地址:https://blog.csdn.net/qq_52119661/article/details/133315891
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号