摘要:
关于赋值的疑问? 示例程序: 第22行是赋值操作符重载,返回值应该为引用类型,参数也应该为引用类型,否则容易出bug。 24行的判断为了避免自赋值。因为在C语言中,i = i这种自赋值是合法的,C++为了兼容C语言,t2 = t2这种自赋值也是合法的。 我们的数组类将拷贝构造定义为私有的,就是不允许
阅读全文
posted @ 2018-09-02 11:26
周伯通789
阅读(334)
推荐(0)
摘要:
客户需求: 需求的第二条比较难以实现,例如第一次调用返回1,第二次返回1,第三次返回2,第四次返回3。 也就是说fib函数是带状态的,每次返回的值都不同。 我们以前接触过的函数大多数都是无状态的。 简单的解决方案就是使用全局变量记录状态,而程序开发中全局变量又是不被推荐使用的,那么还有什么其它的方法
阅读全文
posted @ 2018-09-02 10:29
周伯通789
阅读(208)
推荐(0)
摘要:
问题: string类对象还具备C方式字符串的灵活性吗?还能访问单个字符吗? 字符串类的兼容性: 程序示例: bcc编译器的运行结果如下: vc编译器的结果: 这意味着这三款编译器都是支持以数组访问的方式来使用字符串对象的。 类的对象怎么支持数组的下标访问? 重载数组访问操作符: []操作符是C++
阅读全文
posted @ 2018-09-01 22:57
周伯通789
阅读(204)
推荐(0)
摘要:
在C语言中学习字符串时,我们使用的是字符数组的概念。 C语言中没有真正意义的字符串。为了表达字符串的概念,我们使用了字符数组来模拟字符串。 在应用程序开发中,我们需要大量的处理字符串,如果还用C语言中的方式,效率就显得太低了。 C++中也没有原生的字符串数据类型,C++中为了兼容C,也不支持字符串类
阅读全文
posted @ 2018-09-01 22:02
周伯通789
阅读(254)
推荐(0)
摘要:
有趣的重载: 实验: 将1左移到cout对象中。 将Test改名为Console,此时我们的本意是想让这个cout代表当前的命令行: cout代表命令行的一个实例,本意是想将1打印到命令行上。 我们在重载函数中用printf打印: 运行结果如下: 可以看到1被打印出来了。 我们还可以重载输出字符:
阅读全文
posted @ 2018-09-01 21:18
周伯通789
阅读(193)
推荐(0)
摘要:
复数类: 程序如下: 为了能实现连续的赋值操作,第72行我们返回的是复数的引用。 主函数的第21行先把c2赋值给c3,然后返回c3,最后将c1赋值给c3,返回c3。 运行结果如下: 注意事项: 小结:
阅读全文
posted @ 2018-09-01 20:54
周伯通789
阅读(200)
推荐(0)
摘要:
需要解决的问题: 第一种解决方案: 运行结果如下: 上图中将a和b定义成公有的暴露出来不符合面向对象封装的原则。 第二种方案如下: 虽然解决了复数相加的问题,但是并不完美,显得不自然,我们能否使用c1+c2的这种方式呢? 思考: 操作符重载: 重载的深层次意义就在于可以扩展系统已经存在的功能。 用o
阅读全文
posted @ 2018-09-01 20:41
周伯通789
阅读(239)
推荐(0)
摘要:
函数重载回顾: 类中的重载: 万变不离其宗: 类中的普通成员函数和静态成员函数也够成重载。 示例程序: 运行结果如下: 深度的意义: 重载的意义分析: strncpy实现的功能和strcpy差不多,但是又多了一个名字,导致容易记忆混乱,因此,我们采用strcpy重载的方式将strncpy封装起来。
阅读全文
posted @ 2018-09-01 19:27
周伯通789
阅读(211)
推荐(0)
摘要:
友元的概念: 友元的用法: 程序示例: 运行结果如下: 友元函数可以提高效率,因为在32、33行我们可以直接访问对象中的成员了,而不再使用功能函数。 友元的尴尬: 注意事项: 示例: 46-49行的程序是不合法的,因为A不是C的友元,友元不能传递。 运行结果如下: 小结:
阅读全文
posted @ 2018-09-01 18:57
周伯通789
阅读(148)
推荐(0)
摘要:
构造函数的回顾: 问题: 异常的构造函数: 第12行我们在构造函数中调用了return,运行结果如下: mj的值变成了随机数,意味着mj的值没有被初始化。 第28行的创建的对象t1,它虽然执行了构造函数,但是构造函数的内部是有问题的,有问题也仅仅导致了对象的初始状态不正确,并没有影响t1这个对象的诞
阅读全文
posted @ 2018-09-01 17:08
周伯通789
阅读(192)
推荐(0)