条款18:让接口容易被正确使用,不易被误用(Make interface easy to use correctly and hard to use incorrectly)

NOTE :

1.好的接口容易被正确使用,不容易被误用。应该让所有接口努力达成这些性质。

2.“促进正确使用”的办法包括接口的一致性,以及内置类型的行为兼容。

3.“阻止误用”的办法包括建立新类型/限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。

4.tr1::shared_ptr 支持定制型删除器(custom deleter)。这可以防范DLL问题,可以被用来自动解除互斥锁(mutexs)等等。

时间: 2024-10-12 19:40:17

条款18:让接口容易被正确使用,不易被误用(Make interface easy to use correctly and hard to use incorrectly)的相关文章

effective c++ 条款18 make interface easy to use correctly and hard to use incorrectly

举一个容易犯错的例子 class Date { private: int month; int day; int year; public: Date(int month,int day,int year) { this->month = month; ... } } //wrong example Date date(30,3,1995);//should be 3,30 Date date(2,30,1995);//should be 3,30 使用类型可避免这个问题 class Month

Item 18:让接口容易被正确使用,不易被误用 Effective C++笔记

Item 18: Make interfaces easy to use correctly and hard to use incorrectly. "让接口容易被正确使用,不易被误用",这也是面向对象设计中的重要概念,好的接口在工程实践中尤其重要. 在使用优秀的第三方组件时,常常能够切身感受到好的接口原来可以这么方便,甚至不需记住它的名字和参数就能正确地调用. 反观自己写的API,常常会有人三番五次地问这个参数怎么设置,真是失败.人非圣贤孰能无过,只能在这种痛苦的驱动下努力的重构和

Effective C++:条款18:让接口容易被正确使用,不易被误用

(一) 看下面这个例子: class Date { public: Date(int month, int day, int year); }; 很有可能引起下面这两个错误: (1)他们也许会以错误的次序传递参数,如:Date d(30, 3, 1995); (2)他们可能传递一个无效的月份或天数,如:Date d(2, 30, 1995); 许多像这类客户端错误. 解决方法:简单的外覆(wrapper types)类型来区别天数.月份.和年份,然后于Date构造函数中使用这些类型: struc

Effective C++ (笔记) : 条款18 -- 条款23

条款18:让接口容易被正确使用,不易被误用 在(参数)类型上客户不知道怎么使用的时候,可以导入简单的"外覆"类型来区别参数.也就是,自定义数据类型,使客户明确调用相关的类型,防止误用. 尽量让自定义类型的行为和内置类型的行为相同,因为客户会想当然的和使用内置类型一样使用自定义类型,这也就是上面说的让接口容易被正确的使用.STL容器的接口十分一致,这也是他们非常容易使用的一个原因. 任何接口如果要求客户必须记得做某些事情,那么就有着"不正确的使用"的倾向,因为客户可能

条款36: 区分接口继承和实现继承

作为类的设计者,有时希望派生类只继承成员函数的接口(声明):有时希望派生类同时继承函数的接口和实现,但允许派生类改写实现:有时则希望同时继承接口和实现,并且不允许派生类改写任何东西. class Shape { public: virtual void draw() const = 0; virtual void error(const string& msg); int objectID() const; ... }; class Rectangle: public Shape { ... }

Effective C++ 条款18

让接口容易被正确使用,不容易被误用 如题目,我们自己的程序接口是面向用户的,程序的目的不但是解决问题,而且要让用户容易使用,所以,必须保证我们的程序接口具有很强的鲁棒性. 怎么保证接口的鲁棒性,不同情况有不同的处理结果,作者列出了以下几个例子所对应的方法. 1.设计一个class来表示日期 class Date{ public: void Date(int month, int day, int year); -- }; 以上的构造接口很容易被用户用错 Date d(30, 3, 1995);/

effectivec++条款18,让接口容易被正确使用,不宜被吴勇

test* create_test(); shared_ptr<test> create_test();//下面的接口比上面的接口要好 auto_ptr<test> create_test(); { shared_ptr<test> p(new test()); return p; }

【宋红康学习日记18】接口

一 接口1 接口可看做是一个抽象的类,是一种功能,由常量(public static final修饰)和抽象方法(public abstract修饰)组成 interface AA{ (public static final)int age; (public abstract)void method(); }2 接口与接口:继承关系,多继承.interface AA extends BB,CC{} 类与接口: 实现关系,多实现. class AA implements BB,CC,DD{} 类与

Effective C++ 条款34 区分接口继承和是实现继承

1. C++对于函数成员的继承主要有三种: 只继承接口,不继承实现; 同时继承接口和实现,同时允许覆写实现; 继承接口和实现,同时不允许对实现进行覆写. 2. 对于public继承,成员函数的接口应该总是被继承(由于is-a关系的存在),其中: pure-virtual函数的目的只是为了使派生类继承函数接口; impure-virtual(虚但非纯虚)函数的目的是既允许派生类继承接口和实现,又可以重写实现. non-virtual函数的目的是令派生类继承函数的接口以及一份强制实现.(如果想要重写