C++进阶
文章平均质量分 90
C++进阶
~青萍之末~
弱者总有弱者的理由
展开
-
【Effective C++】定制new和delete
文章目录一、了解new-handler的行为1、new和malloc的对比2、set_new_handler的使用3、new-handler设计要求4、提供自己的set_new_handler和operator new5、请记住二、了解new和delete的合理替换时机1、替换编译器提供的operator new或operator delete2、请记住三、编写new和delete时需固守常规1、...原创 2019-01-19 11:42:41 · 417 阅读 · 0 评论 -
【Effective C++】模板与泛型编程
C++ templates的最初发展动机很直接:让我们得以建立“类型安全”的容器如vector,list和map。然而当愈多人用上templates,他们发现templates有能力完成愈多可能的变化。容器当然很好,但泛型编程——写出的代码和其所处理的对象类型彼此独立——更好。 C++ template机制自身是一部完整的图灵机:它可以被用来计算任何可计算的值。于是导出了模板元编程,创造出...原创 2019-01-19 10:57:00 · 686 阅读 · 0 评论 -
【Effective C++】继承和面向对象设计
一、确定你的public继承塑模出is-a模型1、public继承与“is-a” 以C++进行面向对象编程,最重要的一个规则是:public inheritance(公开继承)意味“is-a”(是一种)的关系。请务必牢记。当你令class D 以public形式继承class B,你便是告诉C++编译器,每一个类型为D的对象同时也是一个类型为B的对象,反之不成立。你的意思是B比D表现出更一般...原创 2019-01-09 19:55:57 · 246 阅读 · 0 评论 -
【Effective C++】实现
文章目录一、尽可能延后变量定义式的出现时间1、变量定义时间点的问题2、请记住二、尽量少做转型动作1、C++四种转型动作2、请记住三、避免返回handles指向对象内部成分1、返回一个“代表对象内部数据”的handle存在的问题2、请记住四、为“异常安全”而努力是值得的1、异常安全函数的三个保证2、请记住五、透彻了解inline函数的里里外外1、inline函数的特点2、inline函数为什么放到头...原创 2018-12-25 20:35:21 · 286 阅读 · 0 评论 -
【Effective C++】设计与声明
文章目录一、让接口容易被正确使用,不易被误用1、引入新类型预防“接口被误用”2、限制类型内什么事可做,什么事不可做3、请记住二、设计class犹如设计type1、设计class的一些问题2、请记住三、宁以pass-by-reference-to-const替换pass-by-value1、pass-by-value存在的问题2、pass-by-reference-to-const的好处3、请记住四...原创 2018-12-22 20:49:19 · 229 阅读 · 0 评论 -
【Effective C++】资源管理
文章目录一、以对象管理资源1、RAII和智能指针2、请记住二、在资源管理类中小心copying行为1、RAII对象被复制时应该怎么做?2、请记住三、在资源管理类中提供对原始资源的访问1、如何操纵原始资源2、请记住四、成对使用new和delete要采用相同的格式1、请记住五、以独立语句将newed对象置入智能指针1、资源泄漏的问题2、请记住一、以对象管理资源1、RAII和智能指针// 返回指针...原创 2018-12-20 22:04:49 · 191 阅读 · 0 评论 -
【Effective C++】构造/析构/赋值运算
文章目录一、了解C++默默编调用了哪些函数1、编译器默认调用的函数2、请记住二、若不想使用编译器自动生成的函数,就该明确拒绝1、拒绝编译器自动生成的函数2、请记住三、为多态基类声明virtual析构函数1、普通的基类的指针指向派生类的对象2、virtual析构函数的作用3、请记住四、别让异常逃离析构函数1、析构函数中发生异常有什么问题?2、请记住五、绝不在构造和析构过程中调用virtual函数1、...原创 2018-12-19 22:18:13 · 354 阅读 · 0 评论 -
【Effective C++】让自己习惯C++
文章目录一、视C++为一个语言联邦1、C++不同于C的部分2、可以将C++分为4个层次二、尽量以const,enum,inline替换#define1、#define存在的问题2、const,enum,inline的好处3、请记住三、尽可能使用const1、const修饰变量2、const修饰函数参数3、const成员函数4、函数返回const5、请记住四、确定对象使用前已被初始化1、成员初始化列...原创 2018-12-19 20:30:14 · 1038 阅读 · 0 评论 -
【C++ Primer】C++11特性总结
C++11包括大量的新特性:主要特征像lambda表达式和移动语义,实用的类型推导关键字auto,更简单的容器遍历方法,和大量使模板更容易使用的改进。这一系列教程将包含所以以上特性。 很明显,C++11为C++带来了大量的新特性。C++11将修复大量缺陷和降低代码拖沓,比如lambda表达式的支持将使代码更简洁。像移动语义这种特性会提高语言内核的基础效率,使你可以写出更快的代码。对模板系统的优原创 2018-02-02 15:58:57 · 1197 阅读 · 0 评论 -
【C++ Primer】特殊的工具和技术
一、控制内存分配1、重载new和delete new的操作过程:第一步、new表达式调用operator new(或者 operator new[])的标准库函数,该函数分配一块足够大的、原始的、未命名的内存空间以便存储特定类型的对象(或数组)。第二步、编译器运行相应的构造函数以构造这些对象,并为其传入初始值。第三步、对象分配了空间并构造完成,返回一个指向该对象的指针 delete的操作过程原创 2018-02-01 20:37:48 · 285 阅读 · 0 评论 -
【C++ Primer】用于大型程序的工具
一、异常处理1、抛出异常 C++通过抛出一个表达式来引发一个异常,throw之后的代码将不会被执行,程序控制权将从throw转移到与之匹配的catch模块(即捕获)(若try语句块还有嵌套,将继续在外层中寻找,称为栈展开),执行完这个catch语句之后,将转移到try块关联的最后一个catch子句之后的点,并从这里继续执行,若找不到与之匹配的catch语句,程序将调用标准库的terminate函数原创 2018-02-01 19:41:14 · 327 阅读 · 0 评论 -
【C++ Primer】标准库特殊设施
一、tuple类型 tuple是类似pair的模板。每个pair的成员类型都不同,但每个pair都恰好有两个成员。不同tuple类型的成员类型也不相同,但一个tuple可以有任意数量的成员。每个确定的tuple类型的成员数目是固定的,但一个tuple类型的成员数目可以与另一个tuple类型不同。 当我们希望将一些数据组合成单一对象,但又不想麻烦地定义一个新数据结构来表示这些数据时,tu...原创 2018-02-01 17:31:01 · 385 阅读 · 0 评论 -
【C++ Primer】模板与泛型编程
面对对象编程OOP和泛型编程都能处理在编写程序时不知道类型的情况,而OOP能处理类型在程序运行之前都未知的情况,在泛型编程中,在编译时就能获知类型了。 模版是C++泛型编程的基础,一个模版就是一个类或函数的蓝图或者说是公式:例如在使用vector这样的泛型类型,或者是find函数这样的泛型类型,我们可以将蓝图转换为特定的类或者是函数,这种转换发生在编译时。一、定义模板1、函数模板 一个函数模原创 2018-02-01 16:08:54 · 875 阅读 · 0 评论 -
【C++ Primer】面向对象程序设计
一、对象数组与对象指针 学习完智能指针后我们就可以用智能指针new一个对象或者进行动态分配:#include <bits/stdc++.h>using namespace std;class Coordinate{public: Coordinate() = default; Coordinate(int x, int y):m_ix(x) ,m_iy(y) {原创 2018-01-27 21:17:05 · 1928 阅读 · 0 评论 -
【C++ Primer】重载运算与类型转换
内置类型运算都有基本的运算符来支持,而我们想要实现类类型的一些运算,就需要自己重载运算符。一、基本概念 重载的运算符是具有特殊名字的函数,他们的名字由关键字operator和后面要定义的运算符号共同组成。和其他函数一样,也有返回类型,参数列表和函数体。 【Note】: 1)当一个重载的运算符是成员函数时,this绑定到左侧的对象,成员运算符函数的参数比运算对象的参数少一个。比如+重载成成员原创 2018-01-26 11:39:36 · 556 阅读 · 0 评论 -
【C++ Primer】拷贝控制
拷贝控制操作包括拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符和析构函数。如果一个类没有定义所有这些拷贝控制成员,编译器会为它定义缺失的操作(尽量明确定义对象拷贝、赋值、移动或者销毁时做什么)。一、拷贝、赋值与销毁 1、构造函数、默认构造函数和拷贝构造函数 (1)构造函数 构造函数与其他函数不同:构造函数和类同名,没有返回类型。 构造函数与其他函数相同:构造函数也有形原创 2018-01-24 21:36:02 · 927 阅读 · 4 评论 -
【C++ Primer】动态内存和智能指针
一、动态内存 c++ 内存获取和释放 new/delete,new[]/delete[] c 内存获取和释放 malloc/free,calloc/realloc 上述8个函数/操作符是c/c++语言里常用来做动态内存的申请和释放的,要理解这些接口,大概需要下面几个维度的了解: 1、了解OS的进程空间模型 一个进程的地址空间,一般划分为内核区、用户区,用户区又划分为栈区、堆原创 2018-01-23 21:26:34 · 889 阅读 · 0 评论 -
【C++ Primer】类
类的基本思想是数据抽象和封装,数据抽象是一种依赖于接口和实现分离的编程技术。一、定义抽象数据类型: C++程序员们无须可以区分应用程序的用户以及类的用户。 1. 成员函数、非成员函数、const成员函数、this对象: (1)成员函数: inline int Size() const{ return m_len; } (2)非成员函数: istream &Read(原创 2018-01-19 20:13:41 · 373 阅读 · 0 评论 -
【C++ Primer】函数
函数是一个命名了的代码块,通过调用函数执行相应的代码,函数可重载。一、函数基础 一个典型的函数定义包含:返回类型、函数名字、零个或者多个实参、函数体。执行函数的第一步是用实参初始化形参。return有两项工作:1、返回值(如果有的话);2、将控制权从被调函数转移回主调函数。int fact(int val){ int ret = 1; re...原创 2017-11-03 20:12:44 · 506 阅读 · 0 评论 -
【C++ Primer】语句
一、简单语句1、使用空语句时应该加上注释,从而令读这段代码的人知道该语句是有意省略的。2、程序块不以分号结束(但是类要以分号结束)。二、语句作用域1、可以在if、switch、while、for语句内定义变量(变量是临时的),在语句结束后变量就不起作用了,所以这些变量要初始化。三、条件语句1、if语句:判断条件是否为真。 悬垂else:C++规定else与离它最近的还未配对的...原创 2017-10-03 10:39:37 · 331 阅读 · 0 评论 -
【C++ Primer】表达式
一、基础1、左值和右值: C++表达式要不然是右值,要不然就是左值。当一个对象被用作右值的时候,用的是对象的值(内容);当对象用作左值的时候,用的是对象的身份(在内存中的位置)。 需要用到左值的地方有: 1)赋值运算符需要一个左值作为其左侧运算对象,得到的结果也是左值。 2)取地址符作用与左值对象,返回的指针是右值。 3)解引用和下标运算符都是...原创 2017-09-28 19:30:10 · 567 阅读 · 0 评论 -
【C++ Primer】字符串和数组
一、命名空间的using声明1、using声明:using namespace::name,例如:using std::cin。一旦声明了上述语句,就可以直接访问命名空间的变量。每个变量都需要using声明,位于头文件中的代码不应该使用using声明。2、using编译:using namespace std;直接使用整个命名空间。 一般来说,使用using声明比使用using编...原创 2017-09-28 15:38:34 · 320 阅读 · 0 评论 -
【C++ Primer】变量和基本类型
目录二、变量三、复合类型四、const限定符五、处理类型六、自定义数据结构一、 基本内置类型1、算术类型分为整形和浮点型,常见的算术类型:char:1个字节,short:2个字节,int:2个字节,long:4个字节,float:4个字节,double:8个字节,long long【c++11】:8个字节。可寻址的最小内存块称为“字节(byte)”,存储的基本类型...原创 2017-08-19 16:54:34 · 415 阅读 · 0 评论