`
ijavagos
  • 浏览: 1250175 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

设计class犹如设计type——effective C++学习笔记

阅读更多

<!--[endif]-->设计class犹如设计typeTreat 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的构造函数定义了一个typepass-by-value该如何实现。

<!--[if !supportLists]-->4、 <!--[endif]-->什么是新type的合法值?class的成员变量而言,通常只有某些数值集是有效的。那些数值集决定了你的class必须维护的约束条件,也就觉得了你的成员函数(特别是构造函数,赋值操作符以及所谓的seter函数)必须进行的错误检查。

<!--[if !supportLists]-->5、 <!--[endif]-->你的新的type需要配合某个继承体系吗?如果你继承自某些既有的class,你就受到那些class的设计的束缚,特别是他们的函数是virtualno-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,也可以决定哪些classesfunctionfriends

<!--[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更能达到目的。

分享到:
评论

相关推荐

    C++学习书籍——effective c++ 3rd(中英文)

    《Effective C++》是Scott Meyers撰写的一本经典C++编程指南,第三版(3rd Edition)更加完善了对现代C++特性的讲解。这本书旨在帮助程序员写出更高效、更可靠、更容易维护的C++代码。它通过一系列的实践建议和编程...

    Effective C++学习笔记

    19. **设计class犹如设计type**:考虑类作为抽象数据类型,关注其封装性和抽象性,避免暴露内部细节。 20. **宁以pass-by-reference-to-const替换pass-by-value**:传递大对象或不可变对象时,传引用更高效,且不会...

    C#学习笔记之——调用C++

    ### C#调用C++知识点详解 #### 一、引言 随着软件开发技术的不断发展,跨语言编程已经成为一种常见的需求。特别是在企业级应用中,往往需要利用不同语言的优势来构建更加高效、灵活的系统。C#作为一种面向对象的...

    Effective C++ 中文版

    条款19:设计class犹如设计type 条款20:宁以pass-by-reference-to-const替换Pass-by-value 条款21:必须返回对象时,别妄想返回其reference 条款22: 将成员变量声明为private 条款23: 宁以non-member、non-...

    effective C++ (3rd) 学习笔记

    通过这些学习笔记,我们可以了解到《Effective C++》不仅为我们提供了C++编程中的一些基本和高级技巧,也教会我们如何遵循最佳实践,编写出更加高效、健壮的C++代码。学习这些知识点,对于提高C++编程能力和解决实际...

    实例001——实现C++类的多重继承.zip

    在C++编程语言中,多重继承是一个重要的特性,它允许一个子类(派生类)继承多个父类(基类)的属性和方法。...通过学习和实践"实例001——实现C++类的多重继承",我们可以更好地理解和掌握这一特性。

    C++学习笔记——继承和组合

    根据给定的文件标题、描述、标签以及部分内容,本文将深入探讨C++中的两个核心概念:继承与组合。这两种机制都是面向对象编程中用于实现代码重用的重要手段,但它们在设计模式、实现细节以及适用场景上存在显著差异...

    Effective C++【中文第三版】.rar

    当您读过《Effective C++:改善程序与设计的55个具体做法(第3版)(中文版)(双色)》之后,就获得了迅速提升自己C++功力的一个契机 (Some people say that C++ programmers can be divided into two categories: those ...

    深入编程内幕——Visual C++

    深入编程内幕——Visual C++,这是一门针对高级开发者的学习指南,旨在帮助读者掌握使用Microsoft Visual C++(简称VC)开发高效、功能丰富的Windows应用程序的技巧。Visual C++作为业界领先的开发工具,其核心特性...

    深入编程内幕 ——VISUAL C++

    《深入编程内幕——Visual C++》是一本专为开发者揭示Visual C++编程核心的书籍,旨在帮助读者深入了解这个强大的开发工具。Visual C++是Microsoft公司推出的面向对象的C++编程环境,它集成了Microsoft Foundation ...

    C++笔记——iNotes

    C++是一种强大的、通用的...这些只是C++编程中的一小部分知识点,"C++笔记——iNotes"可能会涵盖更多细节,如内存管理、异常处理、模板元编程、设计模式等。通过深入学习并结合实践,你可以成为一名熟练的C++开发者。

    c++学习笔记(个人学习时做的笔记)

    【C++学习笔记概述】 C++是一门强大的编程语言,其在C语言的基础上进行了扩展,引入了许多现代化的特性。这份笔记主要涵盖了C++的基础知识,包括C++11和C++17的新特性,旨在帮助初学者理解C++的核心概念。 ### C++...

    电子书 深入编程内幕——Visual C++

    ### 电子书知识点总结:《深入编程内幕——Visual C++》 #### 一、走进Visual C++ **1.1 理解VC工程** - **Workspace文件(.dsw)**: - 作为Visual C++中最顶层的管理单元,Workspace文件负责整合多个Project,...

    Effective C++中文版.pdf

    ### Effective C++中文版知识点概览 #### 从C转向C++ 对于许多已经熟悉C语言的程序员来说,转向C++可能会遇到一些挑战。虽然C是C++的一个子集,但两者之间存在诸多差异,这些差异使得C++拥有更加丰富的特性和更加...

    Effective C++(经典中的经典)

    《Effective C++》是C++编程领域的一部经典著作,由Scott Meyers撰写,它深入浅出地介绍了如何编写高效、可靠且易于维护的C++代码。这本书包含了55个编程实践建议,每个建议都是一个独立的知识点,旨在帮助开发者...

    面向对象的程序设计语言——C++

    首先,C++中的“类”(Class)是面向对象编程的基础,它是一种用户自定义的数据类型,用于描述一类对象的属性(成员变量)和行为(成员函数)。通过定义类,我们可以抽象出现实世界中的实体,使代码更具有结构性和...

    面向对象的程序设计语言4——C++课件 第二版(陈志泊 )

    在《面向对象的程序设计语言4——C++课件 第二版(陈志泊 )》中,作者深入探讨了如何利用Microsoft Foundation Class (MFC)库来开发Windows应用程序。 MFC是微软公司为简化Windows应用程序开发而设计的一组C++类库...

    Effective c++第二版 pdf

    ### Effective C++ 第二版 PDF 关键知识点解析 #### 一、从C转向C++ 对于很多程序员来说,从C转向C++的过程并非易事。尤其是对于那些已经习惯了C语言编程的人来说,这一转变可能会带来一定的挑战。 **原因分析:*...

    01第1章 初识C++——C++程序设计入门

    本章"初识C++——C++程序设计入门"是学习C++之旅的起点,旨在为初学者构建坚实的基础。 首先,C++程序的基本结构通常包括预处理指令、函数定义、变量声明和控制流语句。预处理指令以`#`开头,如`#include`用于引入...

    Effective C++ 3rd Edition 55 Specific Ways to Improve Your Programs and Designs (PDF)

    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: ...

Global site tag (gtag.js) - Google Analytics