Effective C++ 笔记
qq_43556776
这个作者很懒,什么都没留下…
展开
-
条款 09:绝不在构造和析构过程中调用virtual函数
这次从一个例子开始理解吧。 //people.h class People { public: People(const std::string& name):theName(name) { print(); } //People构造函数 virtual void print() //vitrual函数打印名称 { std::cout << theName; } ~People(); //People原创 2020-06-07 15:39:59 · 176 阅读 · 0 评论 -
条款 07:为多态基类声明 virtual 析构函数
的撒原创 2020-06-07 14:52:19 · 102 阅读 · 0 评论 -
条款 06:若不想使用编译器自动生成的函数,就该明确拒绝
在条款5中已经提到,编译器会默默的给你生成复制构造函数和赋值运算符函数。 但如果我们希望每一个对象都是独一无二的,不希望看到拷贝动作的出现。又该怎么做呢? 解决的关键在编译器生成的函数都是public,而只要我们将这两个拷贝函数声明为private,但却不去定义它们,就可以避免编译器为我们自动生成,用户也无法拷贝。 所以即使其他成员函数和友元函数还是可以调用类的private函数,会出现连接错误,在C++中的iostream库中,就是这样处理的。 而有一种做法则可以将原创 2020-06-07 13:48:47 · 109 阅读 · 0 评论 -
条款 05:了解C++默默编写并调用哪些函数
编译器在合法的情况下会为类编写这些函数:默认构造函数(如果没有声明任何构造函数的话),复制构造函数、重载赋值运算符函数、析构函数,这些都是public权限且是inline的。 1.默认构造函数和析构函数主要是掉哟个了基类和非静态成员变量的构造函数的析构函数,注意,编译器产出的析构函数是个non-virtual函数,除非这个类的基类中的析构函数是virtual的。 2.至于复制构造函数,编译器产出的版本知识单纯将来源对象的每个非静态成员变量拷贝到目标对象。 3. 编译器所生成的原创 2020-06-07 13:27:36 · 148 阅读 · 0 评论 -
条款 04:确定对象被使用前已先被初始化
一、对于原创 2020-06-07 12:35:11 · 170 阅读 · 0 评论 -
条款 03:尽可能使用 const
文章目录一、const修饰指针二、const修饰迭代器三、const修饰函数1.const修饰返回值2.const修饰类的成员函数四、请记住 一、const修饰指针 const修饰指针时,可以修饰其指针本身,指针所指物或这两者都修饰。 虽然看似情况挺多,但要区分并不难。如果关键字const出现在星号 * 的左边,表示被指物是个常量,不能通过指针修改所指物;如果出现在 * 右边,则表示指针是一个常指针,不能修改其指向。如果出现在 * 两边,表示被指物和指针都是常量。 结合下面的原创 2020-06-06 19:38:09 · 131 阅读 · 0 评论 -
条款 02:尽量以 const, enum, inline 替换 #define
文章目录一、用const替换#define1. 发生编译错误时,很难追踪2.没有封装性,不能限制作用域二、用enum代替#define三、用inline代替#define四、请记住 一、用const替换#define #define 存在以下的问题: 1. 发生编译错误时,很难追踪 #define PI 3.14 如果运用了上面定义的常量时,由于在预编译时,所以用到了PI的地方全部都已经被替换掉了,若发生编译错误,错误信息只会提到3.14,而不是PI,非常的难以追踪原创 2020-06-06 17:48:03 · 122 阅读 · 0 评论 -
条款 01:视 C++ 为一个语言联邦
C++是个多重范型编程语言,主要分成以下四个次语言: 1.C语言: C++是以C为基础。比如语句、预处理器、内置数据类型、数组、指针等都来源于C。 2.面向对象的C++: C++的面向对象部分。如构造函数、析构函数、封装、继承、多态、虚(virtual)函数(动态绑定)……等等,都是面向对象上设计的守则。 3.泛型编程C++: C++的泛型(Template)编程部分。 4.STL: C++的标准模板库。如容器(vector)、迭代器(iterator)、算法(algorithms)等都是通过原创 2020-06-06 15:44:58 · 420 阅读 · 0 评论