C/C++
文章平均质量分 73
CPriLuke
享受技术,‘漫漫’积累
展开
-
类-类型成员
1.什么是类的类型成员 比如string::size_type就是string类中的某一个类型成员,是类自定义的某种类型在类中的别名。2.类型成员的定义方法 1.类型成员与其他成员一样存在访问限制,即可用private和public进行修饰。 2.定义类型成员可以使用typedef和using关键字。class Screen {public: typ原创 2018-02-03 14:49:48 · 3834 阅读 · 0 评论 -
类-自动合成的函数
1.类可以自动合成哪些函数? 总共有六类: 1)默认构造函数(constructor), 2)拷贝构造函数(copy constructor), 3)拷贝赋值函数(copy assignment), 4)析构函数(destructor), 5)移动构造函数(move constructor), 6)移动赋值函数(move assignment). 构造:直接分配内存并初始化创建一个对象...原创 2018-02-08 17:20:15 · 486 阅读 · 0 评论 -
类-重载运算符
1.什么情况下重载的运算符与内置运算符有什么异同?区别: ①重载操作符必须至少有一个class类或枚举类型; ②重载操作符不保证操作数的求值顺序(逗号,取地址,逻辑与和逻辑或(,&,&&,||)), 例如:对&&与||的重载版本不再支持“短路求值”的特性,两个操作数都要进行求值, 而且不规定操作数的求值顺序;相同: 对于优先级、结合性、操作...原创 2018-02-22 18:29:28 · 1847 阅读 · 0 评论 -
类-share_ptr实现原理
1.引用计数管理内存的原理C++新标准库中采两个智能指针类型来管理动态对象,share_ptr允许多个指针指向同一个对象;unique_ptr则“独占”所指对象。对于share_ptr<T>我们可以按如下方式使用去管理堆内存,相比于new,省去使用delete去释放内存的麻烦。void use_factory(T arg){ share_ptr<Foo> p = fac...原创 2018-02-09 10:51:34 · 3222 阅读 · 0 评论 -
关键字-protected使用总结
为了更好说明,首先定义一个基类如下,里面包含三种不同访问类型的成员函数class Base{public: void pub_mem() {}protected: void prot_mem() {}protected: void priv_mem() {} };①派生类成员或友元可访问基类受保护成员,但只能通过派生类访问;struct Derv:public Base{ //1....原创 2018-03-02 22:04:47 · 706 阅读 · 0 评论 -
顺序容器添加操作
本章内容均从c++ primer摘录总结所有容器除array外,都支持动态的添加操作,但c++顺序容器添加元素的方法可以说是五花八门,让人眼花缭乱,下面总结了一下容器进行插入操作常用的函数和算法:顺序容器与关联容器在使用时最本质的区别是,顺序容器是通过元素位置去操作容器,而关联容器是通过元素值去操作容器。因此,对于顺序容器的添加操作主要需要掌握在容器的头部,尾部,以及任意位置添加一个或者多个元素的...原创 2018-04-14 12:24:21 · 275 阅读 · 0 评论 -
智能指针使用Tip
C++11引入shared_ptr,unique_ptr,weak_ptr后,大大简化了c++对动态内存的管理,为了能更好的发挥智能指针的优势,且避免不必要的异常,下面总结了使用智能指针的的一些注意事项:1.智能指针是行为像指针的类,其本质是一个类,其原理是通过构造/拷贝/赋值/析构操作来维护引用计数,从而达到对资源的管理,且该资源不仅仅限于动态内存;比如:可以通过智能指针管理tcp的连接与端口;...原创 2018-04-15 13:47:17 · 499 阅读 · 0 评论 -
I/O总结
本章均从C++11 primer摘录总结 ①想要顺利的理解IO库,就必须要了解其继承关系,如下: 注意:出ios外,所有的类型均有相关的宽字符流,如wifstream。②IO对象是不能进行拷贝和赋值的,当然这一点在日常的工程点力也不会涉及到。ofstream out1, out2;out1 = out2; //不能对out1对象进行复制③清楚流状态情况,以及一个发生错误后,如何...原创 2018-04-05 08:57:28 · 193 阅读 · 0 评论 -
stack实现表达式计算(附源码)
例子主要实现带括号的+、-、*、/的运算,如“3+(5*5)”的表达式的数值运算。本例是在Dev C++11中编译通过。源码请点击如下链接:点击打开链接1.逻辑思路: 1.遇到(,+、-、*、/符号是压入栈中; 2.遇到),弹出栈中表达式进行计算,直到遇到(为止,并将计算总值压入栈中 3.遇到数字,查看栈顶是否为*或/运算符,如果是弹出运算符和数字进行计算再将计算结果压入栈中 4.其他字符...原创 2018-04-05 09:17:55 · 854 阅读 · 0 评论 -
类-构造、析构、拷贝、移动使用总结
原创 2018-02-08 16:09:56 · 387 阅读 · 0 评论 -
make_shared理解
本章所有内容均从C++ Primer摘录总结1.为什么使用make_shared? make_shared函数的主要功能是在动态内存中分配一个对象并初始化它,返回指向此对象的shared_ptr;由于是通过shared_ptr管理内存,因此一种安全分配和使用动态内存的方法。 如下为make_shared的使用://p1指向一个值为"9999999999"的stringshared_...原创 2018-03-06 20:06:09 · 76995 阅读 · 7 评论 -
std::move理解
本章所有内容均从C++ Primer摘录总结1.为什么要使用std::move? 常规情况下,我们不能将一个右值引用绑定到一个左值上。如下图所示:int &&rr1 = 42; //正确:字面常量的右值int &&rr2 = rr1; //错误:表达式rr1是左值为了能避免这个错误,我们标准库引入了std::move,如下所示,使用了std::move后便...原创 2018-03-06 19:47:09 · 14678 阅读 · 0 评论 -
关键字-inline内联函数
1.为什么使用内联函数及其原理 作用:消除函数调用开销,用于优化规模小、流程直接、频繁调用的函数。 理解:将内联函数在其调用点“内联的”展开。 注意:内联函数只是向编译器发出一个请求,编译器在进行编译时是可以忽略这个请求的//定义内联函数inline const string& shorterString(const string &s1, const string &s2)原创 2018-02-03 15:19:48 · 354 阅读 · 0 评论 -
关键字-const使用总结
1.const定义变量时初始化流程。 分为运行时初始化和编译时初始化两种。const int i = get_size(); //运行时初始化const int j = 43; //编译时初始化2.为什么在默认情况下,const对象仅在本文件内有效? 当以编译时初始化的方式定义一个const对象时,如下 const int j = 43; //原创 2018-02-03 18:18:48 · 539 阅读 · 0 评论 -
关键字-static使用总结
1.什么是静态成员? 语句声明之前带关键字static的成员,可以是函数也可以是数据,静态成员不是任意单独对象的组成部分,而是该类全体对象所共享的。2.有何优点? 1) 作用域位于类的范围之内,避免与其他类的成员或者全局作用域的名字冲突。 2)可以是私有成员,而全局对象不可以。3)相比全局变量,静态成员与特定类的关系容易理解,程序含义清晰。4)通过静态数据成员可以原创 2018-02-03 22:44:07 · 294 阅读 · 0 评论 -
关键字-friend使用
1.什么时候使用? 当非成员函数需要访问类的私有成员时,我们可以把它声明为该类的友元。2.有什么利弊? 利:友元可以“工作在类的内部”,像类的成员一样访问类的所有数据和函数。 弊:使用不慎,可能会破坏类的封装性。3.具体的使用场景举例 友元分为友元函数(非成员函数和其他类的成员函数)和友元类class Sales_data { //类别1:非成原创 2018-02-03 13:00:41 · 902 阅读 · 0 评论 -
类-构造与析构执行顺序详解
1.示例说明 以下面的程序说明函数的执行顺序: 1)定义String类,构造和析构会打印其中的字符串 2)定义一个基类Base,类中含有两个String 3)从基类Base派生出Derive类,类中含有一个String 每个类函数成员都会将执行函数名打印出来。struct String{ String(const string& s = ""):str(s) {cout...原创 2018-02-08 21:03:59 · 641 阅读 · 0 评论 -
类-unique_ptr实现原理
1.管理内存的原理C++新标准库中采两个智能指针类型来管理动态对象,share_ptr允许多个指针指向同一个对象;unique_ptr则“独占”所指对象。对于unique_ptr<T>我们可以按如下方式使用去管理堆内存,相比于new,省去使用delete去释放内存的麻烦。void use_factory(T arg){ unique_ptr_ptr<Foo> p = f...原创 2018-02-09 12:14:49 · 4335 阅读 · 0 评论 -
重载总结
下述内容,均从C++ primer进行摘录总结:一)重载的定义: 如果同一个作用域内的几个函数名字相同但形参列表不同。 提示:main函数不能进行重载void print(const int ia[], size_t size); //两个重载函数void print(const int *beg, const int *end); 二)重载和const形参 我们通过底层co...原创 2018-03-06 19:03:54 · 351 阅读 · 0 评论 -
尾置返回类型
下述内容,均从C++Primer进行摘录总结尾置返回类型是C++11新标准中简化声明函数的方法。常规情况下,如果我们想要定义一个返回数组指针的函数,是比较麻烦的,但通过使用尾置返回类型,就变得容易许多。定义一个返回数组指针的函数我们可以使用一下三种方法:①常规方法:声明一个返回数组长度为10的整形数组int (*func(int i))[10] //func(int i) 表示调用f...原创 2018-03-06 19:09:44 · 1146 阅读 · 0 评论 -
容器初始化方法
在日常的C++编码中,我们经常需要创建并初始化一个容器,因此掌握简单快捷的容器初始化或赋值的方法就显得尤为重要。本章内容是从C++标准库和C++Primer摘录比较常用的初始化和赋值方法:1.采用初值列进行初始化,因为array在定义使要指明其大小,故该操作不是适用array;const std::vector<int> v1 = {1,2,3,4}; //正确const st...原创 2018-04-14 09:53:47 · 3772 阅读 · 0 评论