<!--[endif]-->设计class犹如设计type(Treat class design as type design.)
设计class要带着和“语言设计者当初设计语言内置类型时”一样的谨慎来设计class。
class也是一个types,好的types具备自然的语法,直观的语义,以及一或多个高效实现品。
class设计checklist:
<!--[if !supportLists]-->1、
<!--[endif]-->新type的对象应该如何创建和销毁?
<!--[if !supportLists]-->2、
<!--[endif]-->对象的初始化和对象的赋值该有什么样的差别?这决定了class的构造函数和赋值(assignment)操作符的行为,以及其间的差别,很重要的是不要混淆了初始化和赋值。
<!--[if !supportLists]-->3、
<!--[endif]-->新type的对象如果被passed
by value(以值传递),意味着什么?copy的构造函数定义了一个type的pass-by-value该如何实现。
<!--[if !supportLists]-->4、
<!--[endif]-->什么是新type的合法值?对class的成员变量而言,通常只有某些数值集是有效的。那些数值集决定了你的class必须维护的约束条件,也就觉得了你的成员函数(特别是构造函数,赋值操作符以及所谓的seter函数)必须进行的错误检查。
<!--[if !supportLists]-->5、
<!--[endif]-->你的新的type需要配合某个继承体系吗?如果你继承自某些既有的class,你就受到那些class的设计的束缚,特别是他们的函数是virtual或no-virtual的影响。如果允许其他的classes继承你的class,那么你所声明的函数——尤其是析构函数——是否为virtual。
<!--[if !supportLists]-->6、
<!--[endif]-->你的新type需要什么样的转换?如果你希望类型T1之物被隐式转换为T2之物,就必须在T1内些一个类型转换函数operator T2或在T2内部写一个non-explicit-one-argument(可被单一实参调用)的构造函数。如果你只允许explicit构造函数存在,就得写出专门负责转换的函数,且不得为类型转换操作符(type
conversion operator)或non-explicit-one-argument构造函数。尽量避免隐式转换。
<!--[if !supportLists]-->7、
<!--[endif]-->什么样的操作符和函数对此新的type而言是合理的?
<!--[if !supportLists]-->8、
<!--[endif]-->什么样的标准函数应该被驳回?那些正是你声明为private的函数,比如,构造函数可能会声明为private,也就是不允许进行new操作。
<!--[if !supportLists]-->9、
<!--[endif]-->谁该取用type的成员?这可以决定哪些成员是public,那些成员是protected,那些为private,也可以决定哪些classes和function是friends。
<!--[if !supportLists]-->10、
<!--[endif]-->声明式新type的未声明接口?
<!--[if !supportLists]-->11、
<!--[endif]-->你的新type有多么的一般化?或许你其实并不是定义一个新type,而是定义一整个types家族。果真如此你就不应该定义一个新的class,而应该定义一个新的class template。
<!--[if !supportLists]-->12、
<!--[endif]-->你真的需要一个新的type吗?如果只是定义新的derived class以便为既有的class添加新机能,那么说不定单纯定义一个或多个non-members函数或template更能达到目的。
分享到:
相关推荐
《Effective C++》是Scott Meyers撰写的一本经典C++编程指南,第三版(3rd Edition)更加完善了对现代C++特性的讲解。这本书旨在帮助程序员写出更高效、更可靠、更容易维护的C++代码。它通过一系列的实践建议和编程...
19. **设计class犹如设计type**:考虑类作为抽象数据类型,关注其封装性和抽象性,避免暴露内部细节。 20. **宁以pass-by-reference-to-const替换pass-by-value**:传递大对象或不可变对象时,传引用更高效,且不会...
### C#调用C++知识点详解 #### 一、引言 随着软件开发技术的不断发展,跨语言编程已经成为一种常见的需求。特别是在企业级应用中,往往需要利用不同语言的优势来构建更加高效、灵活的系统。C#作为一种面向对象的...
条款19:设计class犹如设计type 条款20:宁以pass-by-reference-to-const替换Pass-by-value 条款21:必须返回对象时,别妄想返回其reference 条款22: 将成员变量声明为private 条款23: 宁以non-member、non-...
通过这些学习笔记,我们可以了解到《Effective C++》不仅为我们提供了C++编程中的一些基本和高级技巧,也教会我们如何遵循最佳实践,编写出更加高效、健壮的C++代码。学习这些知识点,对于提高C++编程能力和解决实际...
在C++编程语言中,多重继承是一个重要的特性,它允许一个子类(派生类)继承多个父类(基类)的属性和方法。...通过学习和实践"实例001——实现C++类的多重继承",我们可以更好地理解和掌握这一特性。
根据给定的文件标题、描述、标签以及部分内容,本文将深入探讨C++中的两个核心概念:继承与组合。这两种机制都是面向对象编程中用于实现代码重用的重要手段,但它们在设计模式、实现细节以及适用场景上存在显著差异...
当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机 (Some people say that C++ programmers can be divided into two categories: those ...
深入编程内幕——Visual C++,这是一门针对高级开发者的学习指南,旨在帮助读者掌握使用Microsoft Visual C++(简称VC)开发高效、功能丰富的Windows应用程序的技巧。Visual C++作为业界领先的开发工具,其核心特性...
《深入编程内幕——Visual C++》是一本专为开发者揭示Visual C++编程核心的书籍,旨在帮助读者深入了解这个强大的开发工具。Visual C++是Microsoft公司推出的面向对象的C++编程环境,它集成了Microsoft Foundation ...
C++是一种强大的、通用的...这些只是C++编程中的一小部分知识点,"C++笔记——iNotes"可能会涵盖更多细节,如内存管理、异常处理、模板元编程、设计模式等。通过深入学习并结合实践,你可以成为一名熟练的C++开发者。
【C++学习笔记概述】 C++是一门强大的编程语言,其在C语言的基础上进行了扩展,引入了许多现代化的特性。这份笔记主要涵盖了C++的基础知识,包括C++11和C++17的新特性,旨在帮助初学者理解C++的核心概念。 ### C++...
### 电子书知识点总结:《深入编程内幕——Visual C++》 #### 一、走进Visual C++ **1.1 理解VC工程** - **Workspace文件(.dsw)**: - 作为Visual C++中最顶层的管理单元,Workspace文件负责整合多个Project,...
### Effective C++中文版知识点概览 #### 从C转向C++ 对于许多已经熟悉C语言的程序员来说,转向C++可能会遇到一些挑战。虽然C是C++的一个子集,但两者之间存在诸多差异,这些差异使得C++拥有更加丰富的特性和更加...
《Effective C++》是C++编程领域的一部经典著作,由Scott Meyers撰写,它深入浅出地介绍了如何编写高效、可靠且易于维护的C++代码。这本书包含了55个编程实践建议,每个建议都是一个独立的知识点,旨在帮助开发者...
首先,C++中的“类”(Class)是面向对象编程的基础,它是一种用户自定义的数据类型,用于描述一类对象的属性(成员变量)和行为(成员函数)。通过定义类,我们可以抽象出现实世界中的实体,使代码更具有结构性和...
在《面向对象的程序设计语言4——C++课件 第二版(陈志泊 )》中,作者深入探讨了如何利用Microsoft Foundation Class (MFC)库来开发Windows应用程序。 MFC是微软公司为简化Windows应用程序开发而设计的一组C++类库...
### Effective C++ 第二版 PDF 关键知识点解析 #### 一、从C转向C++ 对于很多程序员来说,从C转向C++的过程并非易事。尤其是对于那些已经习惯了C语言编程的人来说,这一转变可能会带来一定的挑战。 **原因分析:*...
本章"初识C++——C++程序设计入门"是学习C++之旅的起点,旨在为初学者构建坚实的基础。 首先,C++程序的基本结构通常包括预处理指令、函数定义、变量声明和控制流语句。预处理指令以`#`开头,如`#include`用于引入...
If you want to really and truly understand C++, you must read Effective C++. After first reading Effective C++, I had a totally new appreciation for and understanding of C++. And it's not just me: ...