【Effective C++】4. 设计与声明

这篇具有很好参考价值的文章主要介绍了【Effective C++】4. 设计与声明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Item19 设计class犹如设计type

  • 如何创建和销毁
  • 初始化对象和对象的赋值应该有什么差别
  • 以值传递意味着什么
  • 新type的合法值
  • 继承体系
  • 类型转换
  • 操作符重载
  • 继承标准
  • 未声明接口
  • type一般化(template)

Item20 宁以pass-by-reference-to-const替换pass-by-value

Item22 将成员变量声明为private

有以下几个优势:

1. 语法一致性:访问class成员时每一个都是函数,不需要记住是否需要小括号

2. 使成员变量的处理有更精准的控制

class AccessLevels {
public:
    int getReadOnly() const { return readOnly; }
    void setReadWrite(int value) { readWrite = value; }
    int getReadWrite() const { return readWrite; }
    void setWriteOnly(int value) { writeOnly = value; }
private:
    int noAccess; // 无访问动作
    int readOnly;
    int readWrite;
    int writeOnly;
};

3. 实现良好的封装特性文章来源地址https://www.toymoban.com/news/detail-820718.html

  • 实现平均速度有两种方法:
    • 通过成员变量记录平均值,同时还得维护累计总量等其他信息,会使内存空间变大;
    • 被调用时才会计算平均值,可以改动实现方法,较为灵活(缺点是执行速度变慢)
class SpeedDataCollection {
public:
    void addValue(int speed) {
        speedList.push_back(speed);
    }
    double averageSoFar() const {
        int sum = std::accumulate(speedList.begin(), speedList.end(), 0);
        return static_cast<double>(sum)/speedList.size();
    }
private:
    std::vector<int> speedList;
};
  • 封装后,只有成员函数能影响它们
    • 如果不封装,改变成员变量,涉及改动的代码太多,维护成本高
  • protected成员变量同样不具备良好的封装性,因为派生类的代码会受影响

到了这里,关于【Effective C++】4. 设计与声明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HarmonyOS(二)—— 初识ArkTS开发语言(下)之ArkTS声明式语法和组件化基础

    通过前面ArkTS开发语言(上)之TypeScript入门以及ArkTS开发语言(中)之ArkTS的由来和演进俩文我们知道了ArkTS的由来以及演进,知道了ArkTS具备了声明式语法和组件化特性,今天,搭建一个可刷新的排行榜页面。在排行榜页面中,使用循环渲染控制语法来实现列表数据渲染,使

    2024年02月04日
    浏览(58)
  • 【Effective C++】让自己习惯C++

    C++由四个次语言组成: C:过程形式,没有模板、没有异常、没有重载 Object-Oriented C++:面向对象形式,类(构造函数和析构函数)、封装、继承、多态 Template:泛型编程、模板元编程 STL:容器、算法、迭代器和函数对象 目标是让编译器来替代预处理器,使用预处理器会存在

    2024年01月21日
    浏览(51)
  • effective c++ 条款2

    尽量用const,enum,inline替换#define 总结就是: 双const:指针不能变(只能指向这一块内存空间),指向的内存单元的值也不能变。 或者可以使用string常量代替: 类的静态成员 在头文件声明,在cpp文件中定义 这样也就完成了常量的定义。 可以在其他函数中,直接调用常量GamePl

    2024年02月15日
    浏览(44)
  • Effective C++ 条款四

    使用未初始化的值会导致不明确的行为 对于内置的数据类型(char,int,float,double等),在使用前必须进行初始化。 对于class来说,在使用对象之前,必须使用构造函数对成员变量进行初始化 但是需要注意赋值和初始化的区别 构造函数中的赋值操作(非初始化) 例如下面的构造函数

    2024年02月05日
    浏览(41)
  • effective c++ 笔记

    TODO:还没看太懂的篇章 item25 item35 模板相关内容 可以将C++视为以下4种次语言的结合体: C 面向对象 模板 STL 每个次语言都有自己的规范,因此当从其中一个切换到另一个时,一些习惯或守则是可能会发生变化的。 用const替换#define有以下2个原因: #define定义的符号名称可能没

    2024年02月10日
    浏览(28)
  • C++笔记-effective stl

    熟悉stl本身 慎重选择stl容器,每一种stl容器对应不同的使用场景,比如deque往往比vector更加合适 封装stl容器,积极的使用stl,可以高效的使用它 积极使用其对应迭代器使用的函数,比如做相加运算使用accumulate替代for循环,可以更加高效 调用对应的函数的时候,不使用过于复

    2024年01月18日
    浏览(42)
  • effective c++ 笔记 条款18-25

    使用外覆类型(wrapper)提醒调用者传参错误检查,将参数的附加条件限制在类型本身 三个参数类型相同的函数容易造成误用 导入新的类型 限制取值 从语法层面限制调用者不能做的事 operate*的返回类型上加上const修饰,防止无意的错误赋值if (a * b = c) 接口应表现出与内置类型

    2024年02月21日
    浏览(43)
  • More Effective C++学习笔记(1)

    在任何情况下都 不能使用指向空值的引用 。一个引用必须总是指向某个对象,必须有初值。 如果变量指向 可修改,且有可能指向null ,就把变量设为 指针 ;如果变量 总是必须代表一个对象(不可能为null) ,就把变量设为 引用 。 引用可能比指针更高效 ,因为不必像指针

    2024年02月12日
    浏览(54)
  • effective c++ 20 传引用代替传值

    本节,作者开始讨论引用。我们知道c语言已经有了指针,通过指针我们也就可以修改变量本身,而不是修改变量的副本(传值), 那么在c++中又搞出来个引用, 那么其是不是有点重复? 我们知道在函数的传参中,如果传递的是指针, 那么就不可避免的要进行取地址和解引

    2024年02月05日
    浏览(46)
  • 《Effective C++中文版,第三版》读书笔记7

    隐式接口: ​ 仅仅由一组有效表达式构成,表达式自身可能看起来很复杂,但它们要求的约束条件一般而言相当直接而明确。 显式接口: ​ 通常由函数的签名式(也就是函数名称、参数类型、返回类型)构成 ​ 在源码中明确可见。 编译期多态: 在编译时才能确定具体调

    2024年02月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包