文章 2022-02-17 来自:开发者社区

Effective C++学习笔记之copy构造函数和default函数和copy赋值函数(operator=)

1 、C++一个空的类里面一般默认的函数比如我们写 class A { };一般里面系统会给你哪些默认函数呢?class A { public: A(){} //default函数 ~A(){} //析构函数 A(const A& a) {} //copy构造函数 A& operator= (const A& a) {} //c...

文章 2022-02-17 来自:开发者社区

读书笔记 effective c++ Item 6 如果你不想使用编译器自动生成的函数,你需要明确拒绝

问题描述-阻止对象的拷贝   现实生活中的房产中介卖房子,一个服务于这个中介的软件系统很自然的会有一个表示要被销售的房屋的类: 1 class HomeForSale { ... };   每个房产中介会立刻指出来,要销售房屋的每个属性都是唯一的,没有两个完全一样的房屋。在这种情况下,拷贝一个HomeForSale对象就没有任何意义了。你在怎么能拷贝一些独一无二的东西呢?因此你...

文章 2022-02-17 来自:开发者社区

读书笔记 effective c++ Item 5 了解c++默认生成并调用的函数

1 编译器会默认生成哪些函数  什么时候空类不再是一个空类?答案是用c++处理的空类。如果你自己不声明,编译器会为你声明它们自己版本的拷贝构造函数,拷贝赋值运算符和析构函数,如果你一个构造函数都没有声明,编译器同样会为你声明一个默认拷贝构造函数。这些所有的函数会是public和inline的(Item30)。因此,如果你写了下面的类: 1 class Empty{}; 本质上来说和下面的...

文章 2022-02-17 来自:开发者社区

读书笔记 effective c++ Item 24 如果函数的所有参数都需要类型转换,将其声明成非成员函数

1. 将需要隐式类型转换的函数声明为成员函数会出现问题 使类支持隐式转换是一个坏的想法。当然也有例外的情况,最常见的一个例子就是数值类型。举个例子,如果你设计一个表示有理数的类,允许从整型到有理数的隐式转换应该是合理的。在C++内建类型中,从int转换到double也是再合理不过的了(比从double转换到int更加合理)。看下面的例子: 1 class Rational { 2 3 ...

文章 2022-02-17 来自:开发者社区

读书笔记 effective c++ Item 23 宁可使用非成员非友元函数函数也不使用成员函数

1. 非成员非友元好还是成员函数好? 想象一个表示web浏览器的类。这样一个类提供了清除下载缓存,清除URL访问历史,从系统中移除所有cookies等接口:   1 class WebBrowser { 2 3 public: 4 5 ... 6 7 void clearCache(); 8 9 void clearHistory(); 10 11 void rem...

文章 2022-02-17 来自:开发者社区

读书笔记 effective c++ Item 37 永远不要重新定义继承而来的函数默认参数值

  从一开始就让我们简化这次的讨论。你有两类你能够继承的函数:虚函数和非虚函数。然而,重新定义一个非虚函数总是错误的(Item 36),所以我们可以安全的把这个条款的讨论限定在继承带默认参数值的虚函数上。 1. 虚函数是动态绑定的,而默认参数是静态绑定的 在这种情况下,这个条款的验证就相当直接了:虚函数是动态绑定的,而默认参数值是静态绑定的。 这是什么?你说你不堪重负的脑袋已经忘记了动态...

文章 2022-02-17 来自:开发者社区

读书笔记 effective c++ Item 36 永远不要重新定义继承而来的非虚函数

  1. 为什么不要重新定义继承而来的非虚函数——实际论证 假设我告诉你一个类D public继承类B,在类B中定义了一个public成员函数mf。Mf的参数和返回类型并不重要,所以假设它们都是void。实现如下: 1 class B { 2 public: 3 void mf(); 4 ... 5 }; 6 lass D: public B { ... } 我们不需要了解B,D或者mf...

文章 2022-02-17 来自:开发者社区

读书笔记 effective c++ Item 46 如果想进行类型转换,在模板内部定义非成员函数

1. 问题的引入——将operator*模板化 Item 24中解释了为什么对于所有参数的隐式类型转换,只有非成员函数是合格的,并且使用了一个为Rational 类创建的operator*函数作为实例。在继续之前建议你先回顾一下这个例子,因为这个条款的讨论是对它的扩展,我们会对Item 24的实例做一些看上去无伤大雅的修改:对Rational和opeartor*同时进行模板化: 1 temp...

文章 2022-02-16 来自:开发者社区

Effective C++ 类与函数设计和申明

Effective C++ 类与函数的设计和申明 在看《Effective C++》这本书的过程中,我无数次的发出感叹,这他妈写得太好了,句句一针见血,直接说到点上。所以决定把这本书的内容加上自己的理解写成5篇博客,我觉得不管你是否理解这些条款,都值得你先记下来。下面的索引对应的是书中的章节。 18:努力让接口完美且最小化 19:区分member functions,non-member fun....

Effective C++ 类与函数设计和申明
文章 2022-02-16 来自:开发者社区

Effective C++ 阅读笔记(二)public继承与继承中的函数覆盖

 public继承是一种is-a关系。也就是说适用于base classes(基类)身上的每一件事都一定适用于derived classes(继承类),每一个derived classes对象都是一个derived classes对象。 class A{ void func(); ... } class B : public A{ ... } voi...

Effective C++ 阅读笔记(二)public继承与继承中的函数覆盖

本页面内关键词为智能算法引擎基于机器学习所生成,如有任何问题,可在页面下方点击"联系我们"与我们沟通。

开发与运维

集结各类场景实战经验,助你开发运维畅行无忧

+关注