- 博客(35)
- 收藏
- 关注
转载 extern关键字
1.变量的生明和定义中C++语言支持分离式编译机制,该机制允许将程序分割为若干个文件,每个文件可被独立编译。为了将程序分为许多文件,则需要在文件中共享代码,例如一个文件的代码可能需要另一个文件中中定义的变量。为了支持分离式编译,C++允许将声明和定义分离开来。变量的声明规定了变量的类型和名字,即使一个名字为程序所知,一个文件如果想使用别处定义的名字则必须包含对那个名字的声明。定义则负责创建与名...
2020-04-02 15:41:17
132
转载 new与malloc与别
1.申请的内存所在位置new操作符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操作符的一个抽象概念,凡是通过new操作符进行内存申请,该内存即为自由存储区。而堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。那么...
2020-04-02 15:40:48
182
原创 C++虚函数表
虚函数表C++中虚函数是通过一张**虚函数表(Virtual Table)**来实现的,在这个表中,主要是一个类的虚函数表的地址表;这张表解决了继承、覆盖的问题。在有虚函数的类的实例中这个表被分配在了这个实例的内存中,所以当我们用父类的指针来操作一个子类的时候,这张虚函数表就像一张地图一样指明了实际所应该调用的函数。C++编译器是保证虚函数表的指针存在于对象实例中最前面的位置(是为了保证取到虚...
2020-04-02 00:35:00
143
原创 一个数组,就一个数字出现1次或有两个数字都出现1次,其他他数字出现2次3次,求出出现1次的数
I 一个数组,就一个数字出现1次,其他出现2次思路:采用异或^位运算,两个相同的数做异或,得到的结果是0,0与A异或得到A,那么把数组里面的数一起异或一遍,就会得到最后出现一次的数。II 一个数组,就一个数字出现1次,其他出现2次思路:仍然采用异或^位运算,两个相同的数做异或,得到的结果是0,0与C异或得到C,那么把数组里面的数一起异或一遍,那么最后就会得到 res = A异或B,也就是两个...
2020-03-19 16:03:54
153
原创 string 使用 operator+超出内存
operator+=返回的是引用,而operator+返回的是值,使用operator+在C++11之前很有可能会导致大量的拷贝行为,需要有额外的空间来存储临时创建的右值,在string很大的情况下,就有可能超出内存限制。...
2020-03-16 12:58:15
265
原创 算法与数据结果:顺序队列,循环队列(数组实现)注意事项
//顺序队列//如果循环队列或者顺序队列采用front指向首元素 rear指向尾元素//会出现当进行出队时,当最后还有一个元素时,此时front = rear 与队空条件一样//可以采用rear指向最后一个元素之后的位置,但出现假溢出,也就是还有空间 所以循环队列可以解决//循环队列//当循环队列采用顺序队列方法以rear指向最后一个元素之后的位置,出现队满和队空条件一样//出现情况:...
2019-11-22 10:14:12
232
原创 C++第十八章:未命名空间--static--extern
tatic关键字static关键字的作用有很多,声明静态全局变量,类的静态成员等。这里主要讨论他在修饰全局变量时与extern的区别。有两点需要注意:1、static修饰全局变量时,声明和定义是同时给出的;2、static的全局作用域只是自身编译单元。编译单元:每个cpp就是一个编译单元,每个编译单元相互之间是独立且相互不知的。一个编译单元(Translation Unit)是指一个.c...
2019-11-18 23:39:37
627
原创 C++第十八章:1.作用域与实参相关的查找---2.两种using 对重载函数的作用域影响
作用域与实参相关的查找首先对命名空间内部名字查找按一般由内向外依次每个作用域进行,有时候会发生名字内层对外层的隐藏,注意即可。实参相关的查找与类类型参数:例外:当我们给函数传递一个类类型的对象时,除了在常规的作用域查找外还会查找实参类所属的命名空间,对于传递类的引用或指针的调用同样有效考虑以下:std::string s;std::cin>>s;//等价于operator&...
2019-11-18 10:57:45
250
原创 C++第十八章:1.命名空间using声明和using指示的使用
使用using声明和using指示对一些普通的参数的作用域影响:1.一个using声明一次只引入一个命名空间成员,从using声明点开始,直到包含该using声明的作用域的末尾,名字都是可见的。外部作用域中定义的同名实体被屏蔽。可以用在全局,局部,命名空间,以及类的作用域2.一个using指示,使得所有可见,并不是一次只引入一个,并且不能出现 在类的作用域using与作用域:using指示...
2019-11-18 00:16:55
1116
原创 C++第十八章:作用域
全局作用域,名字空间作用域,类域,局部作用域,语句作用域之间的关系如下图所示:从上图可以看出,在全局作用域中,定义了两个名字空间H和K。名字空间H又分别位于两个CPP文件A和B中。由此可见,名字空间作用域是可以跨越CPP文件的。在名字空间K中,除了定义了类型外,又定义了一个名字空间N,所以说,名字空间之间是可以互相嵌套的。另外,在名字空间中可以定义类,函数,变量,模版等。在全局作用域中,除了...
2019-11-17 00:05:41
91
原创 C++第八章:<sstream> :istringstream、ostringstream和stringstream
库定义了三种类:istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。另外,每个类都有一个对应的宽字符集版本。简单起见,我主要以stringstream为中心,因为每个转换都要涉及到输入和输出操作。注意,使用string对象来代替字符数组。这样可以避免缓冲区溢出的危险。而且,传入参数和目标对象的类型被自动推导出来,即使使用了...
2019-11-07 15:55:25
214
原创 C++十六章:重载与模板
首先是一个模板函数包含一些指针引用的知识t 的类型推断为普通指针的常量引用 C++primer书上推断是错误的 t 的类型推断为普通指针的常量引用 t 的类型推断为常量引用t 的类型推断为指向常量指针的常量引用t 的类型推断为指向常量指针的常量引用 注意:没有出现书上的const string* & 这种类型,而且在我第三章笔记 发现这种类型是有一点问题的...
2019-11-06 19:39:51
120
原创 C++第十六章:模板实参推断--引用折叠--转发
首先能用于函数模板的转换:与往常一样,顶层const 无论是在形参中还是在实参中,都会被忽略。在其他类型转换中,能在调用中应用于函数模板的包括如下两项。能:●const转换 :可以将一个非const对象的引用(或指针)传递给一个const的引用(或指针)形参●数组或函数指针转换 :如果函数形参不是引用类型,则可以对数组或函数类型的实参应用正常的指针转换。一个数组实参可以转换为一-个指向...
2019-11-06 00:03:13
226
原创 剑指offer第2题用到:C风格字符串和string
一些char [] 和char *到 string的转换知识char p1[4] = {'a','a',' ','a'};//不包含结尾符char p3[5] = "a aa";//包含一个结尾符cout << sizeof(p3) / sizeof(p3[0]) << endl;//C、C++中没有提供 直接获取数组长度的函数。,获取一个数组的大小,//str...
2019-11-05 16:53:59
89
原创 C++第十五章:文本查询类
当一个Query类型的对象被拷贝、移动、赋值或销毁时,将分别发生什么?-- 拷贝:当Query对象被拷贝时,会调用合成的拷贝构造函数,拷贝Query的数据成员,成员q由于是shared_ptr,其引用计数会加1.-- 移动:当Query对象被移动时,会调用合成移动构造函数,会移动数据成员到新的对象。在这个例子中,新对象中的shared_ptr会指向原对象的shared_ptr所指向的地...
2019-11-01 00:09:45
125
原创 C++第十五章:派生类向基类的转换可访问性
派生类向基类的转换可访问性:派生类向基类到转换是否可访问由使用该转换到代码决定,同时派生类到派生访问说明符也会有影响。假定D继承自B:1.只有当D公有继承B时,**用户代码(其实就是对象)**才能使用派生类向基类到转换;如果D继承B的方式时受保护的或者私有的,则用户代码不能使用该转换。(p对应的类是基类 -- d1 d2 d3 对应的类是基类的继承(继承方式如下) -- dd1 dd2 ...
2019-10-29 20:23:12
179
原创 C++第十五章:抽象基类--访问控制与继承--友员关系与继承
抽象基类含有(或者未经覆盖直接继承)纯虚函数的类是抽象基类,抽象基类不能构建对象也就是没有对象纯虚函数直接将继承来的虚函数后书写 =0例如double net_price(size_t)const = 0;访问控制与继承首先一个类使用protected关键字来声明那些希望与派生类分享但是不想被其他公共访问使用的成员,有3个特征1.和私有成员类似,受protected的成员对于 ...
2019-10-26 02:38:51
218
原创 C++十五章:继承-- 虚函数final关键字- 动态绑定-静态成员
OOP核心思想:数据抽象,继承,动态绑定基类通常都应该定义个虚析构函数,即使该函数不执行任何实际操作也是如此虚函数:基类希望派生类各自定义适合自身版本的某些函数,此时基类将这些函数声明成虚函数,派生类使用override 关键字进行标识,派生类不覆盖基类的虚函数,但此时派生类会直接继承其在基类中的版本。动态绑定:**静态类型:**对象在声明时采用的类型,在编译期既已确定;动态类型:通常是...
2019-10-25 12:21:25
313
原创 C++第十四章:lambda ,->箭头运算的重载,function 模板
lambda表达式用法C++11 提供了对匿名函数的支持,称为 Lambda 函数(也叫 Lambda 表达式)。Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。Lambda 表达式本质上与函数声明非常类似。[capture](parameters)->return-type{body} //...
2019-10-23 21:11:02
903
原创 C++第十三章:关于拷贝构造函数,拷贝赋值函数,析构函数
void f(const X& rx, X x){ vector<X> vec; /*vector<int> myVec; myVec.reserve(100); // 新元素还没有构造, // 此时不能用[]访问元素 myVec.resize(102); // 用元素的默认构造函数构造了两个新的元素 myVec[100] ...
2019-10-17 22:20:44
176
原创 C++第三章: C类型字符串一些操作
const char* c1 = "hello"; const char* c2 = "word"; cout << sizeof(c1) << endl;//返回的是类型所占的字节数,char是8个字节 所以这里是8 cout << strlen(c1)<< endl;//计算指定字符串 含有内容 的长度,但不包括结束字符 unsign...
2019-10-15 18:20:29
107
转载 C++ cin一些用法
原文链接:https://blog.csdn.net/imkelt/article/details/52202002cin.sync()的功能是清空缓冲区,而cin.ignore()虽然也是删除缓冲区中数据的作用,但其对缓冲区中的删除数据控制的较精确。有时候你只想取缓冲区的一部分,而舍弃另一部分,这是就可以使用cin.ignore(),其使用方法是:cin.ignore(int intExp...
2019-10-15 17:25:26
444
原创 C+++第十二章:智能指针
首先: shared_ptr<int>o q2 =new int(42) //这个拷贝初始化操作错误, //因为智能指针构造函数是explicit 的 =所以右边是一个int *不能隐式转换到shared_ptr、 shared_ptr<int>o q2(new int(42))//采用直接初始化正确的 //如果非要采用拷贝初始化,必须以下操作,先...
2019-10-12 23:59:06
164
原创 C++第六章:函数指针,重载函数指针 返回指向函数的指针
函数指针bool leng (const string & ,const string &);bool (*pf) (const string & ,const string &);//把上面的函数名替换为(*pf) ,既声明pf指向一个函数,但并未初始化//函数指针指向的函数必须与自己声明的函数类型以及形参类型一致pf = leng ; pf = &am...
2019-09-05 21:27:16
200
原创 C++第六章:函数的重载 以及默认实参
函数重载:首先是保证形参数量和形参类型不同!区别const确定是否是同一函数还是重载的函数1.int f(int );int f(const int );//尽管是一个顶层const,但两个可以接受的实参类型一样 //,并没有区别。所以是同一函数,并没有重载2. int f(int *);//不能接受声明为常量的对...
2019-09-05 20:38:41
274
1
原创 C++第6章:返回类型:返回数组的指针 或 数组的引用
返回数组指针因为数组不能被拷贝,所有函数不能返回数组,但是可以返回数组的指针或引用:使用类型别名: typedef int arrT[10];//arrT是一个类型别名 ,表示含有10个整数的数组或 using arrT =int[10];则 arrT *func(int i) //返回一个指向含有10个整数的数组的指针//如果不使用类型别名 ,则需要牢记数组的维度int ar...
2019-09-03 22:21:49
1020
原创 C++第6章:函数数组形参、可变形参,数组指针
一.数组引用形参和多维数组形参void print(int (&arr)[10]){..............}//如果形参里面是 (int &arr[10]) 这是引用的数组,相对于是包含10个引用的数组,这一般是非法的声明这样的数组引用形参只能将函数作用于大小为10的数组传递多维数组形参:其实没有真正的多维数组,多维数组不过是数组的数组,比如a[10][10]...
2019-09-03 21:00:11
488
原创 C++开始: 赋值给一个无符号类型的
C++中,把负值赋给unsigned 对象是完全合法的,其结果是初始值对无符号类型表示数值总数取模后的余数。所以,如果把-1赋给8位的unsigned char,那么结果是255,因为255是-1对256求模后的值。1.从数学角度解读:取模运算时,对于负数,应该加上被除数的整数倍,使结果大于或等于0之后,再进行运算.也就是:(-1)%256 = (-1+256)%256=255%256=25...
2019-08-23 16:13:25
5265
原创 C++第三章:vector 及迭代器
vector是一个类模板 模板本身不是类或函数。vector的长度类型是跟string相似:string::size_type, vector<类型>::size_type vector<int> v1; // 保持int类型 vector<string> V2; // vector<Sales_item> Sales_V3; // 保...
2019-08-23 16:13:15
3217
原创 C++第三章:string类的大小比较以及范围for循环
首先string类对大小写是敏感的,1.如果两个string对象的长度不同,短的对象的每个字符都与较长string对象对应位置上的字符相同,就说明短string对象小于较长的。 string word = "HA"; string word1 = "HA a "; if (word1 > word) { cout << "1" << endl; } ...
2019-08-23 16:13:10
6126
1
原创 C++:指向常量的指针,常量指针,指向常量的常量指针:初始化区别 以及const的引用情况
指针类型的初始化或赋值,(不存在特例的情况下)对象类型都应该严格匹配如下的初始化是或的关系,每次只存在一个初始化,因为方便比较指向常量的指针可以初始化被同类型的常量和同类型非常量,因为是一个指针的特列,可以指向同类型非常量如下: int i = 42; const int h = 0; double x = 3.0; const int *b =&i ;//正确 c...
2019-08-23 16:13:01
3682
原创 C++:const常量
当const修饰指针时:首先非常量引用不能指向一个常量对象,如:const in ci =104;int & r1 = ci;//错误的,因为r1是非常量引用,那意思是我改变r1的值就改变常量的值,所以这样是不争取的。接着常量引用仅对引用可参与的操作做出了限定,对于引用的对象本身是不是一个常量未作限定。因为对象也可能是个非常量,所以允许通过其他途径改变它的值:如:int i ...
2019-08-23 16:12:53
2705
原创 C++:指针及引用,----以及viod * ---指针引用
引用必须初始化,引用相当于变量的另外一个名字,但引用不是一个对象,没有实际的地址,且引用不能重新绑定在另外一个对象。指针无须在定义时赋值,指针是一个对象 ,因为引用没有实际的地址,所以不能定义指向引用的指针int i, &a=i;|int *p = a;//是错误的,因为a是一个引用,指针不能定义指向引用 一般情况指针和指针指向的对象的类型是匹配的。void * 一种特殊类型...
2019-08-23 16:12:35
3350
原创 C++:关于一些类型定义未初始化的值
std::string a 若未初始化是全局变量,因此值为空字符串。int global_int若未初始化是全局变量,因此值为0lint ocal_int是一个未初始化的局部变量,因此它具有未定义的值。std::string local_str也是一个未初始化的局部变量,但它有一个由类定义的值。 所以它是空字符串。...
2019-08-23 16:11:32
2096
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人