上一页 1 ··· 34 35 36 37 38 39 40 41 42 ··· 56 下一页
摘要: C语言编译中类型转换: C语言编译器只会在标准数据类型之间做转换。 隐式类型转换复习: 结果如下: 第26行的s和'b'转换为int类型再相加。 问题: 示例程序: 编译结果如下: 可以看到这种普通类型到类类型的强制转换是不被允许的。 将程序更改如下: 这时就可以正常编译通过了。 再论构造函数: 只 阅读全文
posted @ 2018-09-02 16:01 周伯通789 阅读(230) 评论(0) 推荐(0) 编辑
摘要: 值得思考的问题: 示例: 反汇编如下: 我们看到i++和++i对应的汇编是完全一样的。仅仅是寄存器不一样。 因为我们并没有使用这两行语句的返回值,而是单纯的两行i++和++i,所以编译器优化后,将返回值抛弃,因此它们的底层汇编是一样的。 linux下g++编译器的反汇编如下: 可以得到结论,独立的两 阅读全文
posted @ 2018-09-02 15:16 周伯通789 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 逗号操作符: 我们如果重载逗号操作符,必须遵守上面的几点。特别是最后两点。 逗号操作符示例: 第35行等价于 j = 6。 重载逗号操作符: 重载逗号操作符要用全局函数。 示例程序: 我们将36行改成func调用的形式: 我们期望36行先计算func(t0),再计算func(t1),但是从输出结果可 阅读全文
posted @ 2018-09-02 14:49 周伯通789 阅读(192) 评论(0) 推荐(0) 编辑
摘要: 潜规则: 在C语言中并没有bool类型。C++中才有。 逻辑表达式示例: 添加func函数: 运行结果: 重载逻辑操作符: C++中允许重载逻辑与和逻辑或,重载逻辑操作符程序入下: 第42行我们期望只调用func(t0),但是从输出可以看到func(t1)也被调用了。而且先调用的是func(t1)。 阅读全文
posted @ 2018-09-02 14:27 周伯通789 阅读(165) 评论(0) 推荐(0) 编辑
摘要: 永恒的话题: 内存泄漏示例: 这段程序我们没有释放堆空间,造成了内存泄漏。 深度的思考: 一片堆空间最多只能由一个指针标识,这可以避免多次释放。杜绝指针运算和比较可以避免野指针。 C++中不存在这样的指针,我们需要自己实现。 解决方案: 这四条都是硬性规定,最后两条说的是同一个问题。 程序与运行结果 阅读全文
posted @ 2018-09-02 12:15 周伯通789 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 关于赋值的疑问? 示例程序: 第22行是赋值操作符重载,返回值应该为引用类型,参数也应该为引用类型,否则容易出bug。 24行的判断为了避免自赋值。因为在C语言中,i = i这种自赋值是合法的,C++为了兼容C语言,t2 = t2这种自赋值也是合法的。 我们的数组类将拷贝构造定义为私有的,就是不允许 阅读全文
posted @ 2018-09-02 11:26 周伯通789 阅读(320) 评论(0) 推荐(0) 编辑
摘要: 客户需求: 需求的第二条比较难以实现,例如第一次调用返回1,第二次返回1,第三次返回2,第四次返回3。 也就是说fib函数是带状态的,每次返回的值都不同。 我们以前接触过的函数大多数都是无状态的。 简单的解决方案就是使用全局变量记录状态,而程序开发中全局变量又是不被推荐使用的,那么还有什么其它的方法 阅读全文
posted @ 2018-09-02 10:29 周伯通789 阅读(197) 评论(0) 推荐(0) 编辑
摘要: 问题: string类对象还具备C方式字符串的灵活性吗?还能访问单个字符吗? 字符串类的兼容性: 程序示例: bcc编译器的运行结果如下: vc编译器的结果: 这意味着这三款编译器都是支持以数组访问的方式来使用字符串对象的。 类的对象怎么支持数组的下标访问? 重载数组访问操作符: []操作符是C++ 阅读全文
posted @ 2018-09-01 22:57 周伯通789 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 在C语言中学习字符串时,我们使用的是字符数组的概念。 C语言中没有真正意义的字符串。为了表达字符串的概念,我们使用了字符数组来模拟字符串。 在应用程序开发中,我们需要大量的处理字符串,如果还用C语言中的方式,效率就显得太低了。 C++中也没有原生的字符串数据类型,C++中为了兼容C,也不支持字符串类 阅读全文
posted @ 2018-09-01 22:02 周伯通789 阅读(236) 评论(0) 推荐(0) 编辑
摘要: 有趣的重载: 实验: 将1左移到cout对象中。 将Test改名为Console,此时我们的本意是想让这个cout代表当前的命令行: cout代表命令行的一个实例,本意是想将1打印到命令行上。 我们在重载函数中用printf打印: 运行结果如下: 可以看到1被打印出来了。 我们还可以重载输出字符: 阅读全文
posted @ 2018-09-01 21:18 周伯通789 阅读(179) 评论(0) 推荐(0) 编辑
上一页 1 ··· 34 35 36 37 38 39 40 41 42 ··· 56 下一页