上一页 1 ··· 37 38 39 40 41 42 43 44 45 ··· 57 下一页
摘要: 未完成的需求: 上图中的第三条我们没有完成。 上一节的程序中,我们每次打印对象数目的时候都要依赖一个对象名,当对象为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)
摘要: 构造函数: 构造函数带参数的意义就是可以使得每个对象有不同的初始化状态。 友情提醒: 示例: 19、20行都叫做对象的初始化,对象从无到有都叫做初始化,初始化的时候会调用构造函数。初始化和赋值是不同的,int i = 0是初始化, i = 1是赋值。赋值和初始化在C语言中的差距不大,但是在面向对象的 阅读全文
posted @ 2018-08-31 23:26 周伯通789 阅读(182) 评论(0) 推荐(0)
摘要: 对象中的成员变量的初始值是多少? 小实验: 示例如下: 我们可以看到打印出来的i和j的值确实是随机值。 添加Test类的全局对象gt,再次运行结果如下: 可以看到gt对象中的i和j都为0。 第20行定义的t1在栈上,而13行的gt在全局存储区。 再次在堆空间创建一个变量,程序如下: 运行结果如下: 阅读全文
posted @ 2018-08-31 22:53 周伯通789 阅读(186) 评论(0) 推荐(0)
上一页 1 ··· 37 38 39 40 41 42 43 44 45 ··· 57 下一页