上一页 1 ··· 27 28 29 30 31 32 33 34 35 ··· 41 下一页
摘要: 异常规范 异常规范的理念看似有前途,但实际的使用效果并不好。 忽视异常规范之前,您至少应该知道它是什么样的,如下所示: double harm(double a) throw(bad_thing); //may throw bad_thing exception double harm(double 阅读全文
posted @ 2019-02-26 08:57 Grooovvve 阅读(745) 评论(0) 推荐(0)
摘要: 通常,引发异常的函数将传递一个对象。这样做的重要优点之一就是,可以利用不同的异常类型来区分不同的函数在不同的情况下引发的异常。 对象可以携带信息,程序员可以根据这些信息来确定异常的原因。 同时,catch块可以根据这些信息来决定采取什么样的措施。 下面是针对函数引发的异常而提供的一种设计: 可以将b 阅读全文
posted @ 2019-02-26 08:56 Grooovvve 阅读(252) 评论(0) 推荐(0)
摘要: 下面介绍如何使用异常机制来处理错误。 C++异常是对程序运行过程中发生的异常情况的一种响应。 异常提供了将控制权从程序的一部分传递到另一部分的途径。 对异常的处理有3个组成部分: 1)引发异常 throw 2)使用处理程序捕获异常 catch 3)使用try块。 try 程序在出现问题时将引发异常, 阅读全文
posted @ 2019-02-26 08:55 Grooovvve 阅读(324) 评论(0) 推荐(0)
摘要: 一种比异常终止更灵活的办法是,使用函数的返回值来指出问题。 例如,ostream类的get(void)成员通常返回下一个输入字符的ASCII码,但到达文件尾时,将返回EOF。 对hmean()来说,这种方法不管用。任何数值都是有效的返回值,因此不存在可以指出问题的特殊值。 在这种情况下,可以使用指针 阅读全文
posted @ 2019-02-26 08:54 Grooovvve 阅读(981) 评论(0) 推荐(0)
摘要: 异常是相对较新的C++功能,有些老式编译器可能没有实现。另外有些编译器可能默认关闭这一特性,需要使用编译器选项来打开它。 这里先讨论一个基本问题: 2.0 * x * y / (x+y) 如果y是x的负值,则上述公式将导致被零除。这是一种不允许的运算。很多新式编译器通过生产一个表示无穷大的特殊浮点值 阅读全文
posted @ 2019-02-26 08:53 Grooovvve 阅读(960) 评论(0) 推荐(0)
摘要: 编译器生成的成员函数 编译器会自动生成一些公有的成员函数——特殊成员函数。 1、 默认构造函数 提供构造函数的动机之一是确保对象总能被正确地初始化。如果类包含指针成员,则必须初始化这些成员。最好提供一个显式默认构造函数,将所有的类数据成员都初始化为合理的值。 如果定义了某种构造函数,编译器将不会定义 阅读全文
posted @ 2019-02-23 12:49 Grooovvve 阅读(195) 评论(0) 推荐(0)
摘要: 如果基类使用动态内存分配,并重新定义赋值和复制构造函数,这将怎样影响派生类的实现?这个问题的答案取决于派生类的属性。如果派生类也使用动态内存分配,那就需要注意学习新的小技巧。 派生类不适用new //Base Class Using DMA class baseDMA { private: char 阅读全文
posted @ 2019-02-23 12:47 Grooovvve 阅读(502) 评论(0) 推荐(0)
摘要: abstract base class,ABC 抽象基类 有时候is-a规则并不像看上去那么简单,例如圆和椭圆的关系。圆是椭圆的特殊情况。椭圆可以派生出圆。但是椭圆的数据成员及方法对于圆来说是信息冗余。圆类继承椭圆类会显得很繁琐。 如果把圆和椭圆分开定义,这种方法效率不高,因为它忽略了圆类和椭圆类的 阅读全文
posted @ 2019-02-23 12:46 Grooovvve 阅读(636) 评论(0) 推荐(0)
摘要: public和private来控制对类成员的访问。 还存在另外一个访问类别,这种类别用关键字protected表示。protected和private相似,在类外只能用公有类成员来访问protected部分中的类成员。但是它们之间的区别体现在基类派生的类中。派生类的成员可以直接访问基类的保护成员,但 阅读全文
posted @ 2019-02-23 12:44 Grooovvve 阅读(178) 评论(0) 推荐(0)
摘要: 程序调用函数时,将使用哪个可执行代码块呢?编译器负责回答这个问题。 将源代码中的函数调用解释为特定的函数代码块被称为函数名联编(binding)。 在C语言中,这非常简单,因为每个函数名对应一个不同的函数。 但是在C++中由于函数重载的缘故,这项任务非常复杂。编译器必须查看函数参数才能确定使用哪个函 阅读全文
posted @ 2019-02-23 12:43 Grooovvve 阅读(409) 评论(0) 推荐(0)
上一页 1 ··· 27 28 29 30 31 32 33 34 35 ··· 41 下一页