随笔分类 -  C++学习

摘要:一、string转int 1. 使用string流 2. 采用标准库中 atoi 函数 3. 采用 stoi 函数 二、int转string 1. 使用string流 2. 使用 sprintf 函数 3. 使用 to_string 函数 阅读全文
posted @ 2018-09-07 15:40 GGBeng 阅读(3376) 评论(0) 推荐(0) 编辑
摘要:一、定义为成员函数的运算符 1. 赋值、调用、下标、成员访问箭头运算符(=、()、[]、->) 2. 改变对象状态的运算符或者与给定类型密切相关的运算符(递增++、递减--、解引用*) 3. 复合赋值运算符(注:它也可以定义为非成员函数) 二、定义为非成员函数的运算符 1. 具有对称性的,即能转换任 阅读全文
posted @ 2018-05-01 16:41 GGBeng 阅读(967) 评论(0) 推荐(0) 编辑
摘要:一、使用“=default” 1. 显式生成拷贝控制成员的合成版本 2. 只能对具有合成版本的成员函数使用“=default” 默认构造函数 拷贝控制成员(拷贝构造函数、拷贝赋值运算符、析构函数、移动构造函数、移动赋值运算符) 3. 使用“=default”生成的合成函数分为内联的和非内联的 二、使 阅读全文
posted @ 2018-05-01 10:32 GGBeng 阅读(193) 评论(0) 推荐(0) 编辑
摘要:一、拷贝构造函数 1. 形式 2. 合成拷贝构造函数 编译器总会为我们合成一个拷贝构造函数,即使我们定义了其他构造函数。 3. 拷贝构造函数不应该是explicit的 拷贝构造函数在必要时可以被隐式地使用。 4. 拷贝初始化 ①用=定义对象 ②传递参数(形参为非引用类型) ③函数返回一个非引用类型的 阅读全文
posted @ 2018-05-01 10:01 GGBeng 阅读(308) 评论(0) 推荐(0) 编辑
摘要:this指针的类型为:classType *const // 即指向类类型非常量版本的常量指针 所以,我们不能把this绑定到一个常量对象上 > 不能在一个常量对象上调用普通的成员函数 我们可以通过在成员函数的参数列表后面加上const关键字,来修改this指针的类型为const classType 阅读全文
posted @ 2018-03-24 16:07 GGBeng 阅读(355) 评论(0) 推荐(0) 编辑
摘要:拷贝类对象的情况: 初始化变量 以值的方式传递一个对象 以值的方式返回一个对象 阅读全文
posted @ 2018-03-24 15:52 GGBeng 阅读(198) 评论(0) 推荐(0) 编辑
摘要:【情景引入】 问题:编写一个程序,输出同种类型两个变量的较大者。 实现: 1 #include <iostream> 2 3 using namespace std; 4 5 template <typename T> 6 const T& func(const T &a, const T &b) 阅读全文
posted @ 2018-03-24 15:03 GGBeng 阅读(239) 评论(1) 推荐(0) 编辑
摘要:作用域屏蔽名字:内层作用域中声明的名字将隐藏外层作用域中声明的同名实体。 同名??C++有关同名的除了变量之外,也就是函数重载了!! 【作用域对于函数重载的限制】 1. 在不同的作用域中无法重载函数名 2. 函数匹配时,编译器首先寻找对该函数名的声明,一旦在当前作用域中找到了所需的名字,编译器就会忽 阅读全文
posted @ 2018-03-24 14:34 GGBeng 阅读(248) 评论(0) 推荐(0) 编辑
摘要:【导读】 本篇文章讲述的是函数调用时,如何使用参数、返回类型。 首先,给出三个经常被举出来的例子: 1 #include <iostream> 2 3 using namespace std; 4 5 void testSwap_val(); 6 void testSwap_ptr(); 7 voi 阅读全文
posted @ 2018-03-24 12:42 GGBeng 阅读(306) 评论(0) 推荐(0) 编辑
摘要:一、声明为const的原因: 把函数不会改变的形参定义成普通的引用会带给函数的调用者一种误导,即函数可以修改它的实参的值; 限制函数所能接受的实参类型,如不能把const对象、字面值或者需要类型转换的对象传递给普通引用的实参。 举例:对于附录中的“find_char函数”,由于我们把其中的strin 阅读全文
posted @ 2018-03-24 10:47 GGBeng 阅读(369) 评论(0) 推荐(0) 编辑
摘要:vector ivec{1, 3, 4, 1, 3, 4}; vector::iterator iter; // iter能读写vector的元素 vector::const_iterator iter; // iter只能读元素,不能写元素 auto it = ivec.begin(); // it的类型为iterator auto it = ivec.cbeg... 阅读全文
posted @ 2018-03-24 09:07 GGBeng 阅读(195) 评论(0) 推荐(0) 编辑
摘要:一、各种初始化的形式 二、默认初始化 定义变量时没有指定初值(此时变量被赋予了“默认值”) 内置类型:①全局变量被初始化为0,②局部变量不被初始化(值是未定义的) 类类型:①有默认构造函数则由默认构造函数初始化,②无默认构造函数同内置类型 三、拷贝初始化 使用等号=初始化一个变量(编译器把等号右侧的 阅读全文
posted @ 2018-03-24 08:48 GGBeng 阅读(756) 评论(0) 推荐(0) 编辑
摘要:拷贝初始化是初始化变量的一种方式:用等号=来初始化变量 这种方式让人误以为初始化是赋值的一种,其实不然,初始化不是赋值 初始化:创建变量时赋予其一个初始值 赋值:把对象的当前值擦除,而以一个新值来替代 阅读全文
posted @ 2018-03-24 08:34 GGBeng 阅读(247) 评论(0) 推荐(0) 编辑
摘要:从编译原理上来说,声明是仅仅告诉编译器,有个某类型的变量会被使用,但是编译器并不会为它分配任何内存。而定义就是分配了内存。这对于以关键字extern进行声明是一定成立的,而对声明格式“int a;”来说,则需要取决于编译器的具体取舍。 对于下面的两句代码: 对于第一行代码,编译器不会做任何事,它不会 阅读全文
posted @ 2018-03-22 12:31 GGBeng 阅读(5471) 评论(0) 推荐(0) 编辑
摘要:输出如下(仅以我的air13pro为例): 阅读全文
posted @ 2018-03-22 10:04 GGBeng 阅读(278) 评论(0) 推荐(0) 编辑
摘要:一、类 1. 常数据成员的初始化只能在构造函数的初始化列表中进行 2. 静态数据成员不可以在类内初始化 3. 创建一个对象时的构造函数的调用次序:对象成员的构造函数、对象自身的构造函数 4. 创建一个派生类对象时的构造函数的调用次序:基类的构造函数、派生类对象成员的构造函数、派生类构造函数 5. c 阅读全文
posted @ 2018-03-07 12:55 GGBeng 阅读(324) 评论(0) 推荐(0) 编辑
摘要:一、特性 静态成员可以在同一个类的不同对象之间提供数据和函数的共享。 不管一个类创建了多少对象,静态成员只有一份拷贝,为所有属于这个类的对象所共享。 二、声明形式 静态数据成员:static 类型名 静态数据成员名; 静态成员函数:static 返回值类型 静态成员函数名(形式参数表); 三、静态数 阅读全文
posted @ 2018-03-07 09:43 GGBeng 阅读(198) 评论(0) 推荐(0) 编辑
摘要:一、关键点 命名空间&作用域&全局作用域 命名空间的多种形式:全局命名空间、嵌套的命名空间、内联命名空间、未命名的命名空间 命名空间与类:名字查找、友元 命名空间与重载 二、基础知识点 全局作用域:也叫全局名字空间,就是main函数所在的作用域 命名空间:分割了全局名字空间,其中每个命名空间是一个作 阅读全文
posted @ 2017-11-18 19:45 GGBeng 阅读(165) 评论(0) 推荐(0) 编辑
摘要:一、关键点 模板实参:模板参数T的实例类型,如int、string等 模板实参推断:从函数实参来确定模板实参的过程 模板类型参数与类型转换:const的转换、数组/函数到指针的转换 显式模板实参:当模板参数类型并未出现在函数参数列表时 通过函数指针推断模板实参:函数指针的类型决定了模板实参的类型 二 阅读全文
posted @ 2017-11-18 14:34 GGBeng 阅读(667) 评论(0) 推荐(1) 编辑
摘要:一、关键点 定义函数模板&类模板 模板参数列表:非类型参数 类模板类名的使用:依据作用域是否加上模板类型 类模板和友元:设置友好关系 模板参数:使用类的类型成员、默认模板实参 成员模板的使用:非模板类的成员模板、模板类的成员模板 二、定义函数模板 注:一个非类型参数可以一个整型,或者是一个指向对象或 阅读全文
posted @ 2017-11-18 11:51 GGBeng 阅读(369) 评论(0) 推荐(0) 编辑