The Blog of Nobody

Welcome! You are in the middle of nowhere. Windows Vista + Safari is recommended.
posts - 38, comments - 157, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

Effective C++

     摘要:
接口继承与实现继承存在着不同。在公共继承体系下,派生类总是继承基类的接口。
纯虚函数要求派生类仅继承接口。
简单(非纯)虚函数要求派生类在继承接口的同时继承默认的实现。
非虚函数要求派生类继承接口和强制内容的实现。
  阅读全文

posted @ 2008-07-06 22:58 ★ROY★ 阅读(658) | 评论 (0)  编辑 |

     摘要:
祝劳动者节日快乐!
l 派生类中的名字会将基类中的名字隐藏起来。在公有继承体系下,这是我们所不希望见到的。
l 为了让被隐藏名字再次可见,可以使用using声明或者转发函数。
  阅读全文

posted @ 2008-05-01 01:11 ★ROY★ 阅读(1359) | 评论 (2)  编辑 |

     摘要: 公共继承意味着“A是一个B”的关系。对于基类成立的一切都应该适用于派生类,因为派生类的对象就是一个基类对象。  阅读全文

posted @ 2008-03-17 22:55 ★ROY★ 阅读(1065) | 评论 (2)  编辑 |

     摘要:
最小化编译依赖的基本理念就是使用声明依赖代替定义依赖。基于这一理念有两种实现方式,它们是:句柄类和接口类。
库头文件必须以完整、并且仅存在声明的形式出现。无论是否涉及模板。
  阅读全文

posted @ 2008-01-01 01:37 ★ROY★ 阅读(947) | 评论 (7)  编辑 |

     摘要: 仅仅对小型的、调用频率高的程序进行内联。这将简化你的调试操作,为底层更新提供方便,降低潜在的代码膨胀发生的可能,并且可以让程序获得更高的速度。
不要将模板声明为inline的,因为它们一般在头文件中出现。

  阅读全文

posted @ 2007-11-18 23:27 ★ROY★ 阅读(1020) | 评论 (1)  编辑 |

     摘要:
异常安全的函数即使在异常抛出时,也不会带来资源泄露,同时也不允许数据结构遭到破坏。这类函数提供基本的、增强的、零异常的三个层面的异常安全保证。
增强保证可以通过复制并交换策略来实现,但是增强保证并不是对所有函数都适用。
函数所提供的异常安全保证通常不要强于其调用的函数中保证层次最弱的一个。
  阅读全文

posted @ 2007-10-04 21:53 ★ROY★ 阅读(947) | 评论 (5)  编辑 |

     摘要: 避免返回指向对象内部部件的句柄(引用、指针或迭代器)。这样做可以增强封装性,帮助const成员函数拥有更加“const”的行为,并且使“野句柄”出现的几率降至最低。  阅读全文

posted @ 2007-09-23 23:25 ★ROY★ 阅读(736) | 评论 (2)  编辑 |

     摘要:
尽可能避免使用转型,尤其是在对性能敏感的代码中不要使用动态转型dynamic_cast。如果一个设计方案需要使用转型,要尝试寻求一条不需要转型的方案来取代。
在必须使用转型时,要尝试将其隐藏在一个函数中。这样客户端程序员就可以调用这些函数,而不是在他们自己的代码中使用转型。
要尽量使用C++风格的转型,避免使用怀旧风格的转型。现代的转型更易读,而且功能更为具体化。
  阅读全文

posted @ 2007-09-13 22:27 ★ROY★ 阅读(800) | 评论 (3)  编辑 |

     摘要:
定义变量的时机越晚越好。这可以提高程序的清晰度和工作效率。
  阅读全文

posted @ 2007-08-19 22:00 ★ROY★ 阅读(744) | 评论 (0)  编辑 |

     摘要: swap是一个非常有趣的程序。它最早是作为STL的一部分引入C++的,而后就成为了异常安全编程的主体内容,另外对于可以自赋值的对象而言它还是一个常用的复制处理机制。由于swap如此神通广大,那么以一个恰当的方式去实现它就显得十分重要了,但是它的举足轻重的地位也决定了实现它并不是一件手到擒来的事情。在本小节中,我们就会针对swap函数展开探索,逐步掌握如何去驾驭它。

  阅读全文

posted @ 2007-08-02 22:05 ★ROY★ 阅读(798) | 评论 (3)  编辑 |

     摘要: 如果你需要对一个函数的所有参数进行类型转换,那么它必须是一个非成员函数。  阅读全文

posted @ 2007-07-05 23:23 ★ROY★ 阅读(753) | 评论 (1)  编辑 |

     摘要:
在特性情况下要更趋向于使用非成员非友元函数,而不是成员函数。这样做可以增强封装性,以及包装的灵活性和功能扩展性。
  阅读全文

posted @ 2007-06-11 22:27 ★ROY★ 阅读(657) | 评论 (0)  编辑 |

     摘要:
要将数据成员声明为私有的。这样可以让客户端访问数据时拥有一致的语义,提供有条不紊的访问控制,强制类符合一致性,为类作者提供更高的灵活性。
protected并不会带来比public更高的封装性。
  阅读全文

posted @ 2007-06-06 18:37 ★ROY★ 阅读(599) | 评论 (0)  编辑 |

     摘要:
不要返回一个指向局部的、分配于栈上的对象;不要返回一个引用去指向分配于堆上的对象;不要返回一个指向局部静态对象的指针或引用。
  阅读全文

posted @ 2007-06-02 21:13 ★ROY★ 阅读(661) | 评论 (2)  编辑 |

     摘要:
尽量使用引用常量传参,而不是传值方式。因为传引用更高效,而且可以避免“截断问题”。
对于内建数据类型、STL迭代和函数对象类型,通常传值方式更实用。
  阅读全文

posted @ 2007-06-01 18:12 ★ROY★ 阅读(698) | 评论 (3)  编辑 |

Full Effective C++ Archive