首页 > 编程语言 >《C++编程规范》五、类的设计与继承

《C++编程规范》五、类的设计与继承

时间:2024-09-06 11:16:53浏览次数:4  
标签:函数 实例 继承 编程 C++ 虚拟 析构 基类 构造函数

目录


第32条 弄清所要编写的是哪种类

了解自我:有很多种不同的类。弄清楚要编写的是哪一种。

不同种类的类适用于不同用途,因此遵循着不同的规则。

  • 值类(如std::pair, std::vector)模仿的是内置类型。一个值类应该:

    • 有一个公用析构函数、复制构造函数和带有值语义的赋值;
    • 没有虚拟函数(包括析构函数);
    • 是用作具体类,而不是基类(见第35条);
    • 总是在栈中实例化,或者作为另一个类直接包含的成员实例化。
  • 基类是类层次结构的构成要素。一个基类应该:

    • 有一个公用而且虚拟,或者保护而且非虚拟的析构函数(见第 50条),和一个非公用复制构造函数和赋值操作符(见第53条);
    • 通过虚拟函数建立接口;
    • 总是动态地在堆中实例化为具体派生类对象,并通过一个(智能)指针来使用。
  • 不严格地说来,traits类是携带有关类型信息的模板。一个traits类应该:

    • 只包含typedef和静态函数,没有可修改的状态或者虚拟函数;
    • 通常不实例化(其构造一般是被禁止的)。
  • 策略类(通常是模板)是可插拔行为的片段。一个策略类应该:

    • 可能有也可能没有状态或者虚拟函数;
    • 通常不独立实例化,只作为基类或者成员。
  • 异常类提供了不寻常的值与引用语义的混合:它们通过值抛出,但应该通过引用捕获(见第73条)。一个异常类应该:

    • 有一个公用析构函数和不会失败(no-fail)的构造函数(特别是一个不会失败的复制构造函数,从异常的复制构造函数抛出将使程序中止);
    • 有虚拟函数,经常实现克隆(见第54条)和访问(visitation);
    • 从std::exception虚拟派生更好。
  • 附属类一般支持某些具体的惯用法(如 RAII,见第 13条)。正确使用是很容易的,想误用反倒难了(具体例子见第53条)。



标签:函数,实例,继承,编程,C++,虚拟,析构,基类,构造函数
From: https://www.cnblogs.com/yubo-guan/p/18399853

相关文章

  • 14 Python面向对象编程:反射
    本篇是Python系列教程第14篇,更多内容敬请访问我的Python合集在Python中,“反射”通常指的是根据字符串查找并执行相关的类、方法或者属性的能力。Python提供了几个内置函数和语法特性来支持这种能力,比如getattr(),setattr(),hasattr(),delattr()以及dir()等。这些功能......
  • 哪个编程工具让你的工作效率翻倍?
    哪个编程工具让你的工作效率翻倍?在日益繁忙的工作环境中,选择合适的编程工具已成为提升开发者工作效率的关键。不同的工具能够帮助我们简化代码编写、自动化任务、提升调试速度,甚至让团队协作更加顺畅。那么,哪款编程工具让你的工作效率翻倍?是智能的代码编辑器,强大的版本控制工......
  • Java高级编程—多线程(完整详解线程的三种实现方式、以及守护线程、出让线程、插入线程
    二十八.多线程文章目录二十八.多线程28.1线程的三种实现方式28.1.1第一种28.1.2第二种28.1.3第三种28.2常见的成员方法28.3守护线程28.4出让线程28.5插入线程28.6线程生命周期28.7同步代码块28.8同步方法28.1线程的三种实现方式继承Thread类的方式进行......
  • C++ STL map/multimap容器
    map/multimap容器Map的特性是,所有元素都会根据元素的键值自动排序。Map所有的元素都是pair,同时拥有实值和键值,pair的第一个元素被视为键值,第二个元素被视为实值,map不允许两个元素有相同的键值。multimap和map的操作类似,唯一区别是multimap的键值可以重复。注意:Map和multimap都......
  • C++(lambda)
    目录1.语法2.示例3.捕获方式4.可变性(mutable关键字)5.Lambda表达式的用途总结C++中的lambda表达式是一种匿名函数,通常用于简化代码,尤其是在处理临时或小型回调函数时。Lambda表达式引入于C++11,并在之后的C++标准中不断增强。它们可以捕获上下文中的变量,生成临时的函数对象......
  • 0906 shell编程与基础算法(leetCode)
    哈希表的基本知识:哈希表(HashTable)又称散列表,是除顺序存储结构、链式存储结构和索引表存储结构之外的又一种存储结构。哈希碰撞:解决办法开放定址法:是一类以发生冲突的哈希地址为自变量,通过某种哈希冲突函数得到一个新的空闲的哈希地址的方法。(1)线性探测法从发生冲突的地......
  • Python异步编程:asyncio库详解
    \asyncio是Python的标准库,用于编写单线程的并发代码。它使用async和await语法来定义和调用异步函数,使得I/O密集型程序能够更有效地使用资源。asyncio的主要特点事件循环:asyncio程序由事件循环驱动,它负责调度协程的执行。协程:使用async定义的异步函数被称为协程。任务:asyn......
  • 【C++】vector有关代码
     C++代码:#include<iostream>#include<vector>intmain(){//创建一个整数类型的vector并初始化std::vector<int>v={1,2,3};//使用迭代器遍历并打印vector中的每个元素for(autoi=v.begin();i!=v.end();++i){std::c......
  • C++ STL set/multiset容器
    set/multiset容器简介Set的特性是,所有元素都会根据元素的值自动被排序。Set不允许两个元素有相同的值。Set的迭代器iterator是一种const_iterator,不能通过迭代器改变任意set元素的值。multiset的特性和用法和set相同,唯一的差别在于它允许值重复。set和multiset的底层实现是红......
  • C++(#include <algorithm>)
    目录1.std::sort2.std::reverse3.std::find4.std::copy5.std::equal6.std::for_each7.std::unique8.std::transform总结#include<algorithm>是C++标准库中的一个头文件,包含了许多常用的算法函数,提供了操作容器、范围和数据的功能。这个库中的算法大多数是通用的,可......