摘要:
动态数组: 虽然,前边我们讲过的用new给基本类型和对象在运行时分配内存,但它们的已寸在编译时就已经确定下来 因为我们为之申请内存的数据类型在程序里有明确的定义,有明确的单位长度! 可是,总有些时候,必须要等到程序运行时才能确定需要申请多少内存,甚至还需要根据程序的运行情况追加申请更多的内存。从某种 阅读全文
摘要:
到目前为止,以前章节的每一个示例程序在完成它的任务时所使用的内存空间都是固定不变的。这个固定不变的内存空间其不实是在编写程序时候就可以知道和确定(一般以变量的形式)。这些程序都不能再程序运行期间动态增加或减少内存空间。 你见过要求用户输入的文本必须不多不少包含多少个字符的程序吗?不可能吧?! 在很多 阅读全文
摘要:
assert函数: C语言和C++都有一个专为调试而准备的工具函数,就是 assert()函数。 这个函数是在C语言的 assert.h 库文件里定义的,所以包含到C++程序里我们用以下语句: assert()函数需要有一个参数,它将测试这个输入参数的真 or 假状态。 如果为真,Do nothin 阅读全文
摘要:
让函数返回错误代码: 让程序能够自行处理潜在错误的办法之一是创建一些测试函数:专门测试某种条件并根据测试结果返回一个代码来表示当前函数的执行状态。 这种方式我们已经了然于心,但我们仍有进一步继续讨论的必要。 不知道大家还记不记得很久很久以前,我们一起写过的那个求阶乘的栗子:factorial.cpp 阅读全文
摘要:
1.标识符名称: 标识符名称包括函数名、常量名、变量名等。这些名字应该能反映它所代表的实际东西,具有一定的意义,使其能 够见名知义,有助于对程序功能的理解。规则如下: 所有宏定义、枚举常数和const常变量,用大写字母命名。 #define ARRAY_SIZE 24 复合词中每个单词的第一个字母大 阅读全文
摘要:
程序出错可以分为两大类:编译时错误(complie-time error)和运行时错误(run-time error)。 编译时错误: 相比之下,编译时错误显然是比较轻的。因为编译将会告诉你它发现了什么错误和它是在哪行代码发现了这个错误的。 我们需要做的只是认真观察和分析编译器给出的出错信息,然后按 阅读全文
摘要:
前一节的 student 示例程序看起来似乎已经解决了问题,但它存在着一些隐患。 首先,在 TeachingStudent 类的 introduce() 方法里,我们不得不明确地告诉编译器应该使用哪一个属性。 这对于 classes 属性来说是应该的,因为教一门课和上一门课有着本质的区别,而作为常识 阅读全文
摘要:
多继承(multiple inheritance)可能是面向对象编程技术中最惹人争议的功能了。 这个概念乍看起来很简单,但它可能引起一些难以预料的后果。 因此,JAVA 和 C# 等面向对象编程语言大都只支持多继承的最简单的版本。 什么时候需要用到多继承? 只要你遇到的问题无法只用一个”是一个”关系 阅读全文
摘要:
回头看我们之前的 rational.cpp,你满意了吗?反正我是觉得那些代码的可读性仍然欠佳:main 函数里边要多次调用 print 方法才能实现分数打印,酱紫不行! 如何通过重载 << 操作符来实现 print 打印分数的功能。( <<官方叫插入器 ) 你或许知道,或许不知道,从第一次输出值开始 阅读全文
摘要:
所谓重载,就是重新赋予新的含义。函数重载是对一个已有的函数赋予新的含义,使之实现新功能。 其实运算符也可以重载,实际上,我们常常在不知不觉之中使用了运算符重载。 运算符重载的方法是定义一个重载运算符的函数,在需要执行被重载的运算符时,系统就自动调用该函数,以实现相应的运算。 也就是说,运算符重载是通 阅读全文