随笔分类 -  已迁移至(博客园_穆晨)

进一步提升自己使用C++解决问题的能力
成员函数与非成员函数的选择
摘要:前言 相信很多使用C++语言的人都有这么一种错误的观点 - 除了主函数,其他函数都应当声明为某个类的成员函数,以实现封装性。 这种观点错在哪里?我们又该如何在成员函数与非成员函数之间进行选择呢? 针对这个问题,本文将给出一种非常科学的解决方案。问题分析 假定有一个网页浏览器类,其中有用来清除... 阅读全文

posted @ 2014-09-16 22:07 空山悟 阅读(633) 评论(0) 推荐(0)

为用户设计良好的接口
摘要:前言 作为一名优秀的程序员,必须保证自己的代码能提供正确的,完善的接口,如此方能和同事,甲方更好的沟通合作,也让自己的代码更加地容易维护。 本文将介绍一些设计优秀接口的思路。思路一:导入新的类型 下面还是先看这个例子,我定义了一个存储日期的 Date 类:1 class Date2 {3 pu... 阅读全文

posted @ 2014-09-15 17:10 空山悟 阅读(543) 评论(0) 推荐(0)

使用智能指针管理对象资源
摘要:前言 在前面的文章中,细致地分析了构造函数,拷贝构造函数,赋值运算符,析构函数这几个类中最重要函数的用法。 如果严格地遵循这些做法,可以消除绝大部分资源管理的问题。 然而,要想更灵活的使用对象中的资源,仅仅这些还不够。譬如,若你想自己控制对象资源的生命周期(不要在作用域结束的时候自动被析构掉)... 阅读全文

posted @ 2014-09-15 13:20 空山悟 阅读(898) 评论(0) 推荐(0)

复制对象时切记复制每一个成分
摘要:前言 标题一看似乎是非常直观简单,没必要特别写下一篇随便记录。 然而,在实际开发中,你会发现做到这一点对于经验不足的 C++ 程序员来说绝对是一个挑战。 要做到复制每一个成分,就一定小心下面说到的两点。第一点:类中新增了成员变量之后,需要在自定义的构造函数,析构函数,赋值运算符重载函数,拷贝构... 阅读全文

posted @ 2014-08-30 16:23 空山悟 阅读(274) 评论(0) 推荐(0)

重载赋值运算符中需要注意的两个问题
摘要:前言 如果系统自动生成的赋值运算符重载函数不合乎你的要求,那么就应当定制自己的赋值运算符。 然而,定制赋值运算符有两点是非常值得注意的,本文将讲解这两点,让你写出更优质的 =运算符。第一点:请返回 reference to *this 我们经常使用如 "a=b=c=1" 这种形式的连锁赋值语句... 阅读全文

posted @ 2014-08-30 15:24 空山悟 阅读(347) 评论(0) 推荐(0)

不要在构造和析构函数中使用虚函数
摘要:前言 本文将讲解一个新手 C++ 程序员经常会犯的错误 - 在构造/析构函数中使用虚函数,并分析错误原因所在以及规避方法。错误起因 首先,假设我们以一个实现交易的类为父类,然后一个实现买的类,一个实现卖的类为其子类。 这三个类的对象初始化过程中,都需要完成注册的这么一件事情 (函数)。然而,各... 阅读全文

posted @ 2014-08-30 11:00 空山悟 阅读(332) 评论(0) 推荐(0)

别让异常逃离析构函数
摘要:前言 析构函数的作用在于完成对象销毁的一些“善后工作”,然而,某些不科学的设计会产生一些问题。 本文将说明其中的一种不科学设计 - "将异常处理机制设定在析构函数中" 会产生的问题,以及解决方案。问题描述 首先,请看一下一段代码: 1 class Widget { 2 public: 3 ... 阅读全文

posted @ 2014-08-29 08:40 空山悟 阅读(196) 评论(0) 推荐(0)

为多态基类声明虚析构函数
摘要:前言 在很多类中,可以看到其析构函数都是声明为虚函数的。 那么,为何要将析构函数声明为虚函数?哪些情况要将析构函数声明为虚函数? 本文将为你解惑。 在使用 C++ 实现多态的时候,有一点一定要清楚:当派生类对象经由基类指针被删除,而此基类的析构函数没有被声明为虚函数的话,那么析构函数只会释放... 阅读全文

posted @ 2014-08-29 08:39 空山悟 阅读(476) 评论(0) 推荐(0)

明确拒绝不想编译器自动生成的拷贝构造函数和赋值运算符重载函数
摘要:前言 如果你不想要编译器帮你自动生成的拷贝机制 (参考前文),那么你应当明确的拒绝。 如何拒绝?这便是本文要解决的主要问题。问题描述 当你定义了一个类,而这个类中各对象之间也是封装的 - 禁止同类对象之间的相互赋值以及复制,那么你需要屏蔽掉编译器帮你生成的拷贝构造函数以及赋值运算符。 在许多... 阅读全文

posted @ 2014-08-29 08:35 空山悟 阅读(626) 评论(0) 推荐(0)

了解 C++ 默默编写并调用的函数
摘要:前言 对于一个类来说,最最基础的三类成员函数莫过于:构造函数,析构函数以及拷贝函数 (copy构造函数和=重载函数)。即使你的类没有为这些函数做出定义,C++ 也会自动为你创建。本文将讲述的是 C++ “偷偷”为你创建的这三个函数究竟是怎么样的。 了解这些,能更清楚代码是如何运转的,从而写出自己... 阅读全文

posted @ 2014-08-28 21:50 空山悟 阅读(290) 评论(0) 推荐(0)

确保对象在被使用前的初始化
摘要:前言 某个对象若不被初始化,意味着它的执行很有可能导致不确定的结果,这是我们的代码所要坚决避免的情况。 本文将讲解 C++ 代码中关于对象初始化的方方面面。成员变量的初始化 当我们构造一个对象的时候 (不含初始化列表),在进入构造函数之前,其实所有成员变量已经被其所属类型的默认构造函数给初始化... 阅读全文

posted @ 2014-08-24 11:18 空山悟 阅读(224) 评论(0) 推荐(0)

尽可能使用 const
摘要:前言 const 关键字是常量修辞符,如果要告知编译器某个变量在程序中不会发生改变,则可将其声明为 const。 但,对 const 关键字的认识不能仅仅停留在这一层 - 它提供了很多更强大的功能。 因此很多情况下const 关键字的使用方法也不是简单的 const + 变量,其用法总的来说是... 阅读全文

posted @ 2014-08-23 22:57 空山悟 阅读(169) 评论(0) 推荐(0)

尽量多的以 const/enum/inline 替代 #define
摘要:前言 在面向过程语言,如 C 语言中,#define 非常常见,也确实好用,值得提倡。但在如今面向对象的语言,如 C++ 语言中,#define 就要尽量少用了。 为何在 C++ 中就要少用了呢? 这是因为 #define 机制只是简单的字符替换,这样一方面你无法对 #define 定义的东西... 阅读全文

posted @ 2014-08-22 22:35 空山悟 阅读(320) 评论(0) 推荐(0)

导航