类型转换和异常处理
来源:互联网 发布:淘宝运营 策划 编辑:程序博客网 时间:2024/06/05 17:15
一、类型转换
1、c语言的转换
在c语言中存在隐性转换,所谓隐性准换就是编译器在运行程序的时候自动的帮你转换了类型;
例如:
int a = 10;
double d = 2.1;
a = d;//c语言中的隐性转换;
char ch = (char) a; //c语言中的强制转换
2、c++中的类型转换
(1)、static_cast
(1_1)用于基本类型之间的转换,但是!不可以进行基本指针之间的转换
(1_2)可以用于有继承关系的类之间的对象的转换和类指针的转换
(1_3)例子:
Father *f = NULL;//父类指针
Child c; //派生类对象;
F = static_cast
//基类class Father {public: virtual void sleep() = 0;//这是个纯虚函数,为了就是多态;};//派生类1class Child1:public Father {public: virtual void sleep() { printf ("child1吃饭\n"); } void child1() { printf ("child1 打游戏\n"); }};//派生类2class Child2:public Father {public: virtual void sleep() { printf ("Child2吃饭\n"); } void Child2() { printf ("Child2学习\n"); }};//基类指针做参数的函数Void func(Father *p){P->sleep(); //参数类型是父类的指针,传进来的指针按道理只可以指向父类的函数//子类的指针传进来之后因为sleep虚函数的原因,实现多态可以指向子类内部的函数Child1 *c = dynamic_cast<Chidl 1*>(p);//这里基类的指针会先进行匹配,匹配成功,即传进来的是Child1类的对象指针//匹配成功之后进行强制转换;//把基类的指针p转换成派生类指针,这样基类指针p可以指向派生类的成员函数;//如果匹配不成功,返回NULL;If(c != NULL ){P->child1();}}
(3)const_cast
去掉变量的只读属性
例如:
Void print(const char *str){//const char *str,这句话,复习下c语言,这句话const修饰的是*,表示被指向的对象的内容不可以改变//char * const str 这句话表示指针str不可以变;也就是str的指向不可以变;char *p = const<char *>(str);//这样就可以改变str指向的内容;P[2] = ‘w’; //假设str指向的内容是字符串”hello”,那这句话改变str指向内容 即l---->w;}
(4)reinterpret_cast
(4_1)用于整形和指针之间的转换
int a;
Int *b = reinterpret_cast
类Student和类Animal之间没有关系Animal c;Student *s1 = reinterpret_cast<Student*>(&c);
二、异常
1、概念
(1)异常是一种程序控制机制,与函数机制独立和互补
函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它依附于栈结构,却可以同时设置多个异常类型作为网捕条件,从而以类型匹配在栈机制中跳跃回馈.
(2)异常设计目的:
栈机制是一种高度节律性控制机制,面向对象编程却要求对象之间有方向、有目的的控制传动,从一开始,异常就是冲着改变程序控制结构,以适应面向对象程序更有效地工作这个主题,而不是仅为了进行错误处理。异常设计出来之后,却发现在错误处理方面获得了最大的好处。
2、异常的用法
// 1、可能发生异常的代码要放到 try块里,异常是需要人为抛的 通过 throw
// 2、异常是跨函数的
// 3、捕获到异常:1、处理它 不让它继续向上抛 2、不处理,继续向上抛
// 4、catch 去进行异常捕捉的时候,要严格遵循类型匹配,和 模板的类型匹配程序相同,不允许做类型的隐式转换
//5、在可能发生异常的代码端进行判断,判断符合出现异常的条件,进行抛出异常
例子:下面的代码,func1里边有处理异常的函数,单数func1里边的异常处理函数不处理异常,所以继续往上抛,就到了调用func1的主函数,到主函数里边去处理异常,符合了上面的用法的第三句话;可能发生异常的语句放在try里边;
void func1(){ try { divid(10,0); } catch (int e) { // printf ("func1 处理了异常:%d 整除 0\n", e); printf ("func1 捕获了异常, 不高兴处理了\n"); throw; // 不处理的情况下,一定要调用 throw 向上抛 } catch (...) { printf ("其他类型异常\n"); } printf ("111111111111111111111\n");}void divid(int x, int y){ if (y == 0) { // return; throw x; // 抛出一个异常,类似与 return 返回值 } printf ("%d / %d = %d\n", x, y, x/y);}int main2_2(){ try { func1(); } catch (int e) { printf ("捕获一个异常:%d 整除 0\n", e); } catch (...) { printf ("其他类型异常\n"); } return 0;}
- 类型转换和异常处理
- C/C++类型转换和异常处理
- 重载+异常处理+类型转换
- struts2的自定义类型转换和异常处理
- C++异常处理catch向上类型转换。
- 类型转换异常处理java.lang.RuntimeException
- python 类型转换+数值操作+异常处理
- struts2类型转换中的异常处理
- json类型转换异常与处理
- JN项目-类型转换异常处理
- Python异常处理和异常类型
- struts2学习dem004_Result类型和异常处理
- Python--枚举类型和异常处理
- C#异常处理和数据类型转换
- java_强制类型转换、内部类、异常处理
- java Date处理和类型转换
- C#知识点总结、异常处理总结、类型转换的异常处理
- C++异常处理 - 栈解旋,异常接口声明,异常类型和异常变量的生命周期
- redis主从复制简单研究
- Int与Integer的比较
- SAP物料管理自动记帐详解
- 重新认识java(六) ---- java中的另类:static关键字(附代码块知识)
- Idea 竖选文本、竖向选择、横向纵向选择文本代码
- 类型转换和异常处理
- 垃圾收集器与内存分配策略——(一)对象已死吗?
- Edit自动换行
- pymongo.errors.OperationFailure: not authorized on test to execute command { listCollections: 1, cur
- 【POCO】POCO学习总结(四)——WinGW编译poco
- 【C语言·字符串】关于字符串的输入问题
- 关于vscode中v-for,canvas报错的问题的解决方案
- 排序算法之冒泡排序
- QQ兴趣部落引流方法经验谈