摘要:
问题: string类对象还具备C方式字符串的灵活性吗?还能访问单个字符吗? 字符串类的兼容性: 程序示例: bcc编译器的运行结果如下: vc编译器的结果: 这意味着这三款编译器都是支持以数组访问的方式来使用字符串对象的。 类的对象怎么支持数组的下标访问? 重载数组访问操作符: []操作符是C++ 阅读全文
posted @ 2018-09-01 22:57
周伯通789
阅读(204)
评论(0)
推荐(0)
摘要:
在C语言中学习字符串时,我们使用的是字符数组的概念。 C语言中没有真正意义的字符串。为了表达字符串的概念,我们使用了字符数组来模拟字符串。 在应用程序开发中,我们需要大量的处理字符串,如果还用C语言中的方式,效率就显得太低了。 C++中也没有原生的字符串数据类型,C++中为了兼容C,也不支持字符串类 阅读全文
posted @ 2018-09-01 22:02
周伯通789
阅读(254)
评论(0)
推荐(0)
摘要:
有趣的重载: 实验: 将1左移到cout对象中。 将Test改名为Console,此时我们的本意是想让这个cout代表当前的命令行: cout代表命令行的一个实例,本意是想将1打印到命令行上。 我们在重载函数中用printf打印: 运行结果如下: 可以看到1被打印出来了。 我们还可以重载输出字符: 阅读全文
posted @ 2018-09-01 21:18
周伯通789
阅读(193)
评论(0)
推荐(0)
摘要:
复数类: 程序如下: 为了能实现连续的赋值操作,第72行我们返回的是复数的引用。 主函数的第21行先把c2赋值给c3,然后返回c3,最后将c1赋值给c3,返回c3。 运行结果如下: 注意事项: 小结: 阅读全文
posted @ 2018-09-01 20:54
周伯通789
阅读(200)
评论(0)
推荐(0)
摘要:
需要解决的问题: 第一种解决方案: 运行结果如下: 上图中将a和b定义成公有的暴露出来不符合面向对象封装的原则。 第二种方案如下: 虽然解决了复数相加的问题,但是并不完美,显得不自然,我们能否使用c1+c2的这种方式呢? 思考: 操作符重载: 重载的深层次意义就在于可以扩展系统已经存在的功能。 用o 阅读全文
posted @ 2018-09-01 20:41
周伯通789
阅读(239)
评论(0)
推荐(0)
摘要:
函数重载回顾: 类中的重载: 万变不离其宗: 类中的普通成员函数和静态成员函数也够成重载。 示例程序: 运行结果如下: 深度的意义: 重载的意义分析: strncpy实现的功能和strcpy差不多,但是又多了一个名字,导致容易记忆混乱,因此,我们采用strcpy重载的方式将strncpy封装起来。 阅读全文
posted @ 2018-09-01 19:27
周伯通789
阅读(211)
评论(0)
推荐(0)
摘要:
友元的概念: 友元的用法: 程序示例: 运行结果如下: 友元函数可以提高效率,因为在32、33行我们可以直接访问对象中的成员了,而不再使用功能函数。 友元的尴尬: 注意事项: 示例: 46-49行的程序是不合法的,因为A不是C的友元,友元不能传递。 运行结果如下: 小结: 阅读全文
posted @ 2018-09-01 18:57
周伯通789
阅读(148)
评论(0)
推荐(0)
摘要:
构造函数的回顾: 问题: 异常的构造函数: 第12行我们在构造函数中调用了return,运行结果如下: mj的值变成了随机数,意味着mj的值没有被初始化。 第28行的创建的对象t1,它虽然执行了构造函数,但是构造函数的内部是有问题的,有问题也仅仅导致了对象的初始状态不正确,并没有影响t1这个对象的诞 阅读全文
posted @ 2018-09-01 17:08
周伯通789
阅读(192)
评论(0)
推荐(0)
摘要:
未完成的需求: 上图中的第三条我们没有完成。 上一节的程序中,我们每次打印对象数目的时候都要依赖一个对象名,当对象为0时,我们就无法获得对象数目。 解决方案1: 将静态成员变量改为public的,这样我们就可以直接访问了,随时可以获得对象的数目。 如下: 上面程序可以得到正确的结果,但是安全性得不到 阅读全文
posted @ 2018-09-01 16:03
周伯通789
阅读(187)
评论(0)
推荐(0)
摘要:
成员变量的回顾: 新的需求: 使用全局变量可以解决这个问题,但是使用全局变量在当代的软件开发中是不受欢迎的。 静态成员变量: 静态成员变量的生命期如同全局变量一样,就是程序的运行周期。 由于静态成员变量不属于某个对象,而是属于这个类的,因此,静态成员变量不可能占用对象的空间,所以静态成员变量只能在类 阅读全文
posted @ 2018-09-01 15:32
周伯通789
阅读(168)
评论(0)
推荐(0)
摘要:
关于析构的疑问: 当程序中存在多个对象的时候,如何确定这些对象的析构顺序? 多个对象析构时,析构顺序与构造顺序相反。 假设构造三个对象a、b、c,则程序结束时,析构顺序为c、b、a。 程序示例: 首先构造全局对象gA,然后mA、mB,最后Test本身,析构顺序相反。 运行结果如下: 关于析构的答案: 阅读全文
posted @ 2018-09-01 13:16
周伯通789
阅读(167)
评论(0)
推荐(0)
摘要:
有趣的问题: 我们在无参构造函数中调用带一个参数的构造函数。 程序如下: 运行结果如下: mi并没有打印出0,而是一个随机值。 发生了什么呢? 思考: 构造函数可以直接手工调用。 上面的程序第10行直接调用了构造函数产生了临时对象。它的生命期只有第10行这一条语句,过了这条语句就会被析构。 而且这个 阅读全文
posted @ 2018-09-01 11:55
周伯通789
阅读(128)
评论(0)
推荐(0)
摘要:
对象的销毁: 前几节的程序中,我们在数组类中自己定义了free函数来释放空间,free函数需要我们手动调用,手动调用就有可能出错或者忘记调用,从而造成内存泄漏。,这次,我们定义了析构函数,由程序自动调用。 析构函数: 析构函数没有返回值,没有参数,因此,析构函数是不能重载的。 析构函数使用初探: 运 阅读全文
posted @ 2018-09-01 11:31
周伯通789
阅读(163)
评论(0)
推荐(0)
摘要:
问题: C++中的类可以定义多个对象,那么对象的构造顺序是怎么样的? 对象的构造顺序一: 示例如下: 运行结果如下: 添加上goto语句,运行结果如下: 引入goto使得30-37行的程序被跳过,因此a对象就不会被构造了。 执行流和局部对象的构造息息相关。 非法改变程序的执行流,可能引起灾难性的错误 阅读全文
posted @ 2018-09-01 11:06
周伯通789
阅读(366)
评论(0)
推荐(0)
摘要:
类中是否可以定义const成员? 小实验: 类中的const成员实验: 编译结果如下: 可以看到用这个类定义一个对象时,const成员必须要初始化。但是这个初始化不能在构造函数中去做。 因为ci是只读变量,只读变量是不能出现在赋值符号的左边的,所以第10行会报错。编译器提示我们要在第八行进行初始化, 阅读全文
posted @ 2018-09-01 10:10
周伯通789
阅读(281)
评论(0)
推荐(0)
摘要:
特殊的构造函数: 示例如下: 17-24行就是编译器替我们提供的默认构造函数和拷贝构造函数。 运行结果如下: 可以看到t1和t2中i和j的值是一样的。 当我们的类中没有编写任何的构造函数时,编译器才会给我们提供默认的构造函数,拷贝构造函数是构造函数的一种。 拷贝构造函数: 兼容C语言的方式类似于 T 阅读全文
posted @ 2018-09-01 00:01
周伯通789
阅读(202)
评论(0)
推荐(0)
浙公网安备 33010602011771号