1.类型转换

c 方式 强制类型转换过于粗暴  各种类型间可以随意转换 编译器难以判断正确性

#include <iostream>#include <windows.h>using namespace std;class A
{
private:int m_a;
public:void seta(int a);A();};void A::seta(int a)
{m_a = a;
}A::A()
{m_a = 0;
}class B :public A
{
private:int m_b;
public:void setb(int b);B();};void B::setb(int b)
{m_b = b;
}B::B()
{m_b = 0;
}//c语言中的无敌强制类型转换
//1.1c++中的普通类型转换static_cast       是在编译时期转换的 运行时无法检测类型
//1.2c++中的强制类型转换reinterpret_cast
//1.3c++中的常类型转换const_castint main()
{/*1.1*//*int a = 1;double b = 2.1;a = (int)b;a = static_cast<int>(b);//可以用于普通数据类型转换A aa;B bb;aa = bb;aa = static_cast<A>(bb);//可以用于派生类数据类型转换A *pa = new A;B *pb = new B;pa = pb;pa = static_cast<A *>(pb);//可以用于派生类指针类型转换pb = static_cast<B *>(pa);int *cha = new int;double *chb = new double;cha = (int *)chb;//cha = static_cast<int *>(chb);//不可用于普通指针类型的转换*//*1.2*//*int a = 1;char b = 'a';int *pa = &a;char *pb = &b;pa = reinterpret_cast<int *>(pb);pb = reinterpret_cast<char *>(0x100);*//*1.3*/const int a = 1;int *pa = const_cast<int *>(&a); //const_cast作用就是去除原来的const,下面两个一样const int &b = 1;int &pb = const_cast<int &>(b); //但是这里的int & 是常引用 用常量初始化 相当于 定义了一个变量pb = 2;cout << "b is : " << b << endl;const int c = 1;int &pc = const_cast<int &>(c);  /*这里的常 变量 用常数初始化 是将其写在符号表中 数值不可更改 (和#define差不多 只是作用域不同 #define 作用域是那一行向下 常变量 相当于局部变量*/pc = 2;cout << "c is : " << c << endl;system("pause");return 0;
}

2.异常处理机制

发生错误时 就抛出问题 让接收的 进行处理

/*简单了解一下 异常处理机制*/
/* 一层抛出 */#include <iostream>#include <windows.h>using namespace std;double Div(double a, double b)
{if (b == 0){throw 'a';                 //除数为0 抛出异常 //抛出 整型数值   catch里面就写   int//抛出 char 字符 catch里面就写   char}return a / b;
}int main()
{double  a, b;cout << "please input two numbers: " << endl;cin >> a >> b;try{cout << Div(a, b) << endl;}catch (int){cout << "(int) second number zero is error " << endl;}catch (char){cout << "(char) second number zero is error " << endl;}system("pause");return 0;
}/* 两层 或者 多重抛出 */#include <iostream>#include <windows.h>using namespace std;double Div(double a, double b)
{if (b == 0){throw 'a';                 //除数为0 抛出异常 //抛出 整型数值   catch里面就写   int//抛出 char 字符 catch里面就写   char}return a / b;
}double f(double x, double y)
{try{Div(x , y);}catch (char){throw 0;}
}int main()
{double  a, b;cout << "please input two numbers: " << endl;cin >> a >> b;try{cout << f(a, b) << endl;}catch (int){cout << "(int) second number zero is error " << endl;}catch (char){cout << "(char) second number zero is error " << endl;}system("pause");return 0;
}/* 注意如果函数声明的时候 后面接throw() 括号里有什么类型 就只可以抛出什么类型的异常 没有就无法抛出异常 看到相应代码要认识 */
#include <iostream>#include <windows.h>using namespace std;double Div(double a, double b) throw();double f(double x, double y)
{try{Div(x, y);}catch (char){throw 0;}
}int main()
{double  a, b;cout << "please input two numbers: " << endl;cin >> a >> b;try{cout << f(a, b) << endl;}catch (int){cout << "(int) second number zero is error " << endl;}catch (char){cout << "(char) second number zero is error " << endl;}system("pause");return 0;
}double Div(double a, double b) throw()
{if (b == 0){throw 'a';                 //除数为0 抛出异常 //抛出 整型数值   catch里面就写   int//抛出 char 字符 catch里面就写   char}return a / b;
}/* 抛出异常 的过程中 创建了类对象 在对应的括号结束时 会自动析构(相当于函数体结束) */
#include <iostream>#include <windows.h>using namespace std;class Test
{
private:int m_a;
public:Test();~Test();
};Test::Test()
{cout << "Test constructor ok~ " << endl;
}Test::~Test()
{cout << "Test destructor ok~ " << endl;
}double Div(double a, double b)
{if (b == 0){Test t2;cout << " throw under here to do (here is t2)" << endl;throw 'a';                    //除数为0 抛出异常 //抛出 整型数值   catch里面就写   int//抛出 char 字符 catch里面就写   char}return a / b;
}int main()
{double  a, b;cout << "please input two numbers: " << endl;cin >> a >> b;try{Test t1;cout << Div(a, b) << endl;cout << "Div(a, b) func over (here is Test t1)" << endl;}catch (int){cout << "(int) second number zero is error " << endl;}catch (char){cout << "(char) second number zero is error " << endl;}system("pause");return 0;
}  /* 如果抛出 类对象 */#include <iostream>#include <windows.h>using namespace std;class Test
{
private:int m_a;
public:Test();~Test();
};Test::Test()
{cout << "Test constructor ok~ " << endl;
}Test::~Test()
{cout << "Test destructor ok~ " << endl;
}double Div(double a, double b)
{if (b == 0){Test t2;cout << " throw under here to do (here is t2)" << endl;throw Test();                   //除数为0 抛出异常 异常类型为 Test }return a / b;
}int main()
{double  a, b;cout << "please input two numbers: " << endl;cin >> a >> b;try{Test t1;cout << Div(a, b) << endl;cout << "Div(a, b) func over (here is Test t1)" << endl;}catch (Test){cout << "(Test) second number zero is error " << endl;   //用 Test 接收 的话 最后会析构这个test 因为这里 的catch(test)中的test 调用了拷贝构造函数}
//  catch (Test &)
//  {
//      cout << "(Test &) second number zero is error " << endl;  //  一般建议用test & 进行捕获 方便简单 不需要析构
//  }
//  catch (Test *t)
//  {
//      cout << "(Test *t) second number zero is error " << endl; //  test * 捕获的话 最后要记得删除 指针
//      delete t; //
//  }system("pause");return 0;
}

3.异常类

异常是类 – 创建自己的异常类
异常派生
异常中的数据:数据成员
按引用传递异常
在异常中使用虚函数
案例:设计一个数组类 MyArray,重载[]操作,
数组初始化时,对数组的个数进行有效检查 
index<0 抛出异常eNegative  
index = 0 抛出异常 eZero  
    3)index>1000抛出异常eTooBig 
    4)index<10 抛出异常eTooSmall 
    5)eSize类是以上类的父类,实现有参数构造、并定义virtual void printErr()输出错误。

#include <iostream>#include <windows.h>using namespace std;class Myarray
{
private:int m_len;char *m_data;
public:Myarray(int l);~Myarray();class esize{protected:char *msg;public:esize(char *m) : msg(m){}virtual void printerror() = 0;};class enegative : public esize{public:enegative() : esize("enegative exception"){}void printerror(){cout << msg << endl;}};class ezero : public esize{public:ezero() : esize("ezero exception"){}void printerror(){cout << msg << endl;}};class Toosmall : public esize{public:Toosmall() : esize("Toosmall exception"){}void printerror(){cout << msg << endl;}};class Toobig : public esize{public:Toobig() : esize("Toobig exception"){}void printerror(){cout << msg << endl;}};};Myarray::Myarray(int l)
{if (l < 0){throw enegative();}else if (l == 0){throw ezero();}else if (l > 0 && l <= 10){throw Toosmall();}else if (l > 1000 ){throw Toobig();}m_len = l;m_data = new char[m_len + 1];
}Myarray::~Myarray()
{cout << "destuct Myarray ok~ " << endl;
}int main()
{try{Myarray a1(-1);Myarray a2(10);Myarray a3(0);Myarray a4(1001);}catch (Myarray::enegative &e)        /*上面说过的用 & 去接收; 这里因为是类中类 所以加上域限制*/{e.printerror();}catch (Myarray::Toosmall &e){e.printerror();}catch (Myarray::Toobig &e){e.printerror();}system("pause");return 0;
}

4.创建自己的异常类

#include <iostream>#include <Exception>using namespace std;class Myexception :public exception
{
private:char *Errmsg;
public:Myexception(char *s) : Errmsg(s){}virtual const char * what() const throw(){return Errmsg;}
};double Div(double x , double y)
{if (0 == y){throw Myexception("xxxxx");}return x / y;
}int main()
{double a = 2.5, b = 0;try{cout << Div(a , b) << endl;}catch (Myexception &a){cout << a.what() << endl;}system("pause");return 0;
}

5.文件操作

#include <iostream>#include <iomanip>
#include <windows.h>using namespace std;int main()
{int a = 1314;cout << "十六进制 1314 : " << hex << a << endl;cout << "十进制 1314 : " << dec << a << endl;cout << "八进制 1314 : " << oct << a << endl;cout << "setbase(16) 1314 : " << setbase(16) << a << endl;system("pause");return 0;
}/* 打开文件 输入程序 */
#include <iostream>#include <fstream>
#include <windows.h>using namespace std;int main()
{char buf[32] = {0};ifstream ifs("hello.txt",ios::in);       //创建文件对象 打开方式为 读出  从文件读出 到 程序//ifs >> buf;//cout << "read from hello.txt :" << buf << endl;char ch;while ((ch = ifs.get()) != EOF){cout << ch;}cout << endl;system("pause");return 0;
}/* 打开第一个文件 将其中内容 复制到 另一个文件中 */#include <iostream>#include <fstream>
#include <windows.h>using namespace std;int main()
{ifstream ifs("hello.txt", ios::in); //读取文件char buf[32] = {0};ifs.read(buf , 32);ofstream ofs("hello1.txt", ios::out);     //创建文件对象 打开方式为 写入 从程序 写入到 文件 app方式是追加//char buf[32] = "xxxxxxxxxx";//ofs << buf;ofs.write(buf , 32);ofs.close();system("pause");return 0;
}

昨天电脑问题 补昨日8-3复习内容 异常与文件操作相关推荐

  1. 复习--linux目录及文件操作

    文件及目录的一些操作 你可以使用 man [命令]来查看各个命令的使用文档,如 :man mv 目录查看 目录查看 ls -[alh] [文件或目录名称] 不加 [文件或目录名称]的话默认是当前目录 ...

  2. 《计算机组成原理》期末习题讲解和重点复习内容

    文章目录 计算机组成原理重点复习内容 一.I/O部分 1.中断系统流程图与结构图 2.DMA系统的流程图与结构图 二.CPU的数据通路 1.基础知识部分 2.大题部分 三.Cache的映射问题 四.磁 ...

  3. 抖音怎么在电脑上看_抖音电脑直播权限怎么开通?抖音直播伴侣怎么操作?一文全解...

    我们都知道,在这个全民直播的时代,只需要一部手机就能随时随地开直播. 然而很多人在直播时都会遇到这样的问题: 手机直播画面不清晰:网速不给力,直播间人一多就卡出马赛克:手机硬件不够好,声音画面不同步. ...

  4. 计算机文件无法显示后缀,但一般情况下电脑默认是看不到文件格式显示(也就是文件扩展名)...

    我们都知道Powerpoint的文件是PPT格式的,但其实不然,有时为了让对方直接播放会保存为PPS文件,这样当双击PPS文件的时候就会直接播放了,所以这也使得有些人无法打开PPS文件进行编辑,这不今 ...

  5. IntelliJ IDEA 自动补全变量名称和变量类型(自动补全变量的声明内容)

    文章目录 var Option + Enter Option + Command + V var // 如下声明定义一个字符串变量 String s = new String(); // 1 先编写 ...

  6. Java基础复习笔记系列 七 IO操作

    Java基础复习笔记系列之 IO操作 我们说的出入,都是站在程序的角度来说的.FileInputStream是读入数据.?????? 1.流是什么东西? 这章的理解的关键是:形象思维.一个管道插入了一 ...

  7. 《计算机系统与网络安全技术》一页纸开卷/期末复习内容

    期末前和小伙伴一起整理的一页纸开卷内容.因为一页纸的原因,图片压的很小,原本的字体应该是 等线 六号,为了尽可能打印更多的量而使用了极为紧凑的排列方法. 正文: BIOS组件:自检及初始化程序 参数配 ...

  8. 电脑端如何隐藏显示CAD图层内容

    在日常CAD制图的过程中,我们常常需要查看CAD图纸,有时候由于图纸内容细节复杂,无法看清需要查看的具体图层内容,该怎么办呢?其实可以使用隐藏/显示图层内容的方式,将部分图层暂时隐藏起来,便于查看显示 ...

  9. iphone文件连接smb服务器,实用!三种iPhone与Windows电脑互传文件操作技巧,建议收藏...

    如果你是苹果全家桶用户,一定会对 「AirDrop(隔空投送)」 功能赞誉有加,使用 AirDrop 可以在 iPhone 与 MacBook.iPad 等设备之间快速传递照片.视频或文件. 遗憾的是 ...

最新文章

  1. android ota 升级脚本,Android OTA升級包制作腳本詳解(五,升級腳本updater-script的執行1)...
  2. android系统tee接口,Android操作系统上的TEE / HSM支持
  3. 打开金蝶K/3控制台提示“连接中间层加密服务失败,请确认中间层加密服务已启动”...
  4. CVPR 2021 比CNN和Transformer更好的Backbone?伯克利谷歌提出BoTNet,精度达84.7%
  5. 用python画月亮的代码-用 Python 画一个超级月亮
  6. Trie树统计单词前缀
  7. 云炬随笔20190419
  8. RPC与其实现方式概念笔记
  9. C语言重要知识点回顾
  10. staruml顺序图生成协作图_一个工具箱 之 南丁格尔玫瑰图生成器
  11. idea application context not configured for this file的问题的解决
  12. Khronos EGL and Apple EAGL
  13. UVA 10624 Super Number
  14. java键盘输入到文件中_在Linux中使用java和javac命令编译运行java文件
  15. Node.js nodemn
  16. L2-006 树的遍历(建树)
  17. docker安装gamit_科学网—ubuntu下安装gamit 安装 - 贺小星的博文
  18. div网页布局(做一个简单网页界面为例)
  19. 安装Chrome插件-ChroPath
  20. RxJavaAndroid学习笔记

热门文章

  1. c++ 调用cmd命令行函数 可隐藏黑框 四种方法总结
  2. linux子系统gdp调试,Linux系统中GDB功能汇总
  3. python 代理ip验证_Python 快速验证代理IP是否有效,再也不用担心被封IP了!
  4. python 福利彩票_使用Python买福彩,5个数字,20选5,有没买过
  5. requestanimationframe_requestAnimationFrame详解以及无线页面优化
  6. 计算机在中学物理的应用分析报告,BGPLUS官方合作 | 加州大学伯克利分校 | 物理:计算机算法及物理在工程中应用...
  7. linux spyder 目录,linux下创建spyder桌面图标的方法
  8. 计算机行业从业者的核心竞争力,计算机行业:创新企业上市新规发布,重视具备核心竞争力的真成长.pdf...
  9. jca oracle官方文档,Oracle 官方文档说明
  10. 配置syslog发送_nginx简单配置优化概述