C++ 学习笔记
文章平均质量分 63
会有那么一天oc
人生不止编程,还有美妙的生活和美好的人。心中装着美好,随处是风景 !
展开
-
C++ Primer 文本查询程序
//QueryResult.h#include <memory>#include <vector>#include <map>#include <set>#include <string>class QueryResult{ friend std::ostream &print(std::ostream &...原创 2018-03-10 15:26:58 · 384 阅读 · 0 评论 -
C++11 thread 及互斥锁、条件变量
启动的格式:#include //包含头文件void fucntion();//定义一个线程执行的函数thread t1(fucntion);//线程启动这个函数//一创建就自动运行,主线程非阻塞void factorial(int n,char b,..);//带参数的函数,参数的个数顺延thread t2(factorial,5,'a原创 2018-01-25 21:25:24 · 3629 阅读 · 0 评论 -
网络的基本概念
网络模型OSI层模型、TCP/IP的层模型如下所示:TCP/IP:传输控制协议/网络协议OSI:开放式系统互联TCP/IP各层对应的协议如下所示:由模型可知:IP协议:对应于网络层,是网络层的协议,TCP协议:对应于传输层,是传输层的协议,主要解决数据如何在网络中传输。HTTP协议:对应于应用层,是应用层的协议,主要解决如何包装数据。So原创 2018-01-29 15:40:38 · 236 阅读 · 0 评论 -
C++ TCP通信
TCP通信过程:UDP通信过程:WSAStartup()此函数在应用程序中初始化Windows Sockets DLL ,只有此函数调用成功后,应用程序才可以再调用其他Windows Sockets DLL中的API函数。在程式中调用该函数的形式如下:WSAStartup((WORD)((1其中(1Socket原创 2018-01-29 15:42:52 · 804 阅读 · 0 评论 -
堆和栈的主要区别
1申请方式和回收方式 stack: 由系统自动分配。 例如,声明在函数中一个局部变量 int b; 系统自动在栈中为b开辟空间 heap: 需要程序员自己申请,并指明大小,在c中malloc函数 如p1 = (char *)malloc(10); 在C++中用new运算符 如p2 =原创 2018-01-23 21:03:20 · 253 阅读 · 1 评论 -
程序的内存分配即一个由C/C++编译的程序占用的内存分为以下几个部分
一个由C/C++编译到程序占用的内存分为以下几个部分:1、栈区(stack)——由编译器自动分配释放,在不需要的时候自动清除。用于存放函数的参数、局部变量等。操作方式类似数据结构中的栈(后进先出)。2、堆区(heap)——一般由程序员分配释放,若程序员分配后不释放,程序结束后可能由OS回收。不同于数据结构中的堆,分配方式有些类似链表。3、全局区(静态区)——全局变量和静态变量存原创 2018-01-23 20:13:24 · 688 阅读 · 0 评论 -
static 全局变量、局部变量、函数与普通全局变量、局部变量、函数区别
全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。 这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不原创 2018-01-23 19:57:51 · 494 阅读 · 0 评论 -
关键字static的作用
static关键字至少有下列n个作用:(1)设置变量的存储域,函数体内static变量的作用范围为该函数体,不同于auto变量,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值;(2)限制变量的作用域,在模块内的static全局变量可以被模块内所用函数访问,但不能被模块外其它函数访问;(3)限制函数的作用域,在模块内的static函数只可被这一模块内的其它函数调用,这个函数原创 2018-01-23 19:35:43 · 242 阅读 · 0 评论 -
sizeof 和 strlen 的区别
1.sizeof是操作符,strlen是函数。2.在计算字符串数组的长度上有区别,例如:char str[20] = "0123456789";int a = strlen(str);//a=10;int b = sizeof(str);//而b=20;a 计算的是以0x00结束的字符串的长度(不包括0x00结束符)这里结果为10;b 计算的则是分配的数组 str[20]原创 2018-01-30 16:34:40 · 241 阅读 · 0 评论 -
C语言中常见的内存错误与解决方法(含野指针概念)
常见的错误 关于内存的一些知识已在内存分配中提及,现记录与分享常见的内存错误与对策。类型 1:内存未分配成功,却使用了它。方 法:在使用之前检查指针是否为NULL。 1)当指针p是函数的参数时,在函数入口处用语句assert(p!=NULL)进行断言检查。 2)当使用malloc或new来申请内存时,应该用if(p原创 2018-01-30 16:35:51 · 330 阅读 · 0 评论 -
内存分配及堆与栈的区别
1.内存分配方式内存分配方式有三种: 1.从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 2.从栈上分配。函数内的局部变量的存储单元,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 3.从堆上分配,亦称动态内原创 2018-01-30 16:38:22 · 242 阅读 · 0 评论 -
关键字 const 含义、作用,与#define相比的优点
const意味着”只读”本质:const在谁后面谁就不可以修改,const在最前面则将其后移一位,二者等效。下面的声明都是什么意思?const int a;int const a;//前两个的作用是一样,a是一个常整型数。const int *a;//意味着a是一个指向常整型数的指针(也就是,整型数是不可 修改的,但指针可以)。int * const a;/原创 2018-01-30 16:40:22 · 426 阅读 · 0 评论 -
C++ Primer 第一章 快速入门
1.1 编写简单的C++程序 任何一个都要包含一个main函数,因为这个函数是系统执行入口c++也一样,函数格式是 int main(); 和别的主要函数不同C++的主函数有且只有一个且返回一个int类型的值。一般来说返回0表示执行成功,不同编译器处理返回值不同,有的返回0和1都是正常结束。程序员可以不必定义return 0返回这时候系统会在编译时自动加上return 0; 在C++中...原创 2018-02-28 18:55:46 · 209 阅读 · 0 评论 -
c++ explicit 关键字
explicit用来防止由构造函数定义的隐式转换。 要明白它的作用,首先要了解隐式转换:可以用单个实参来调用的构造函数定义了从形参类型到该类类型的一个隐式转换。例如:class things{public: things(const std::string&name =""): m_name(name),height(0),weight(10){}i...转载 2018-03-08 17:43:01 · 156 阅读 · 0 评论 -
C++ Primer 第二章 变量和基本类型
2.1 基本内置类型 基本数据类型包括算术类型和空类型 算术类型分为两类:整型(包括字符和布尔类型在内)和浮点型,其中字符是单字节的整数,ASCII字符代表的值是0~127,用unsigned char表示一个不太大的整数。 字:储存的基本单元 1字 = 4/8个字节 字节:(byte)是计算机中数据处理的基本单元 1byte = 8bit 比特(b...原创 2018-02-28 20:32:45 · 207 阅读 · 0 评论 -
C++构造函数种类、拷贝构造函数、拷贝赋值运算符、深拷贝浅拷贝
构造函数是干什么的该类对象被创建时,编译系统对象分配内存空间,并自动调用该构造函数,由构造函数完成成员的初始化工作,故:构造函数的作用:初始化对象的数据成员。构造函数的种类 1 class Complex 2 { 3 4 private : 5 double m_real; 6 double m_imag; 7 8 public: 9 ...原创 2018-03-06 17:36:10 · 391 阅读 · 0 评论 -
C++ using声明与指示的区别
- using声明格式为:using 加限定修饰的名字空间成员(using std::string) - 一次只能引入命名空间的一个成员,其有效范围从using声明开始,到using声明所在的作用域结束为止 。- using指示符格式为:using namespace 名字空间名(using namespace std) - 将XX命名空间的所有成员变成可见,作用域和using声明一致...原创 2018-03-20 12:36:42 · 2357 阅读 · 0 评论 -
C++进程、线程、多线程概念及线程的优缺点
进程:进程是一个正在执行的程序,是向CPU申请资源的,进程之间数据相互独立,一个进程至少有一个线程。线程:线程是进程中的单一的顺序控制流程也可以叫做最小控制单元,线程是进程中执行单元,开启一个线程比开启一个进程更加节省资源。 多线程:多线程是多任务处理的一种特殊形式,多任务处理允许让电脑同时运行两个或两个以上的程序。一般情况下,两种类型的多任原创 2018-01-25 21:24:39 · 4291 阅读 · 0 评论 -
C++ 异常处理详解
捕获异常:捕获异常的语法为:try{// 可能抛出异常的语句}catch(异常类型){// 处理异常的语句}try 和 catch 都是C++中的关键字,后跟语句块,不能省略“{ }”。try 中包含可能会抛出异常的语句,一旦有异常抛出就会被捕获。从“try”的意思可以看出,它只是“尝试”捕获异常,如果没有异常抛出,那就什么也不捕获。catc原创 2017-12-13 20:57:58 · 690 阅读 · 0 评论 -
C++继承详解
继承概念: 是一个很简单很直观的概念,与现实世界中的继承类似。可以理解为一个类从另一个类获取成员变量和成员函数的过程。例如类 B 继承于类 A,那么 B 就拥有 A 的成员变量和成员函数。被继承的类称为父类或基类,继承的类称为子类或派生类。派生类除了拥有基类的成员,还可以定义自己的新成员,以增强类的功能。使用的场景: 1) 当你创建的新类与现有的类相似,只是多出若干成员变量或成原创 2017-11-19 22:50:32 · 474 阅读 · 0 评论 -
类和对象
类是创建对象的模板,一个类可以创建多个对象,每个对象都是类类型的一个变量;创建对象的过程也叫类的实例化。每个对象都是类的一个具体实例(Instance),拥有类的成员变量和成员函数。与结构体一样,类只是一种复杂数据类型的声明(有别于普通数据类型在于类这种数据类型,是一个包含成员变量和成员函数的集合),不占用内存空间(所以在定义类时不能对成员变量进行初始化,因为没有地方存储数据)。而对象是类原创 2017-11-22 21:44:06 · 257 阅读 · 0 评论 -
构造函数和析构函数
构造函数(Constructor)定义:在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。这种特殊的成员函数就是构造函数(Constructor)。构造函数的规则:(1)构造函数没有返回值,因为没有变量来接收返回值,即使有也毫无用处,这意味着:(a)不管是声明还是定义,函数名前面原创 2017-11-22 21:45:49 · 312 阅读 · 1 评论 -
引用
引用(Reference)是 C++ 相对于C语言的又一个扩充。引用可以看做是数据的一个别名,通过这个别名和原来的名字都能够找到这份数据。引用类似于 Windows 中的快捷方式,一个可执行程序可以有多个快捷方式,通过这些快捷方式和可执行程序本身都能够运行程序;引用还类似于人的绰号(笔名),使用绰号(笔名)和本名都能表示一个人。定义方式:引用的定义方式类似于指针,只是用原创 2017-11-22 21:50:42 · 323 阅读 · 0 评论 -
友元函数和友元类
一个类中可以有 public、protected、private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员。现在,我们来介绍一种例外情况——友元(friend)。借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数访问当前类的 private 成员。友元函数:在当前类以外定义的、不属于原创 2017-11-22 21:48:46 · 251 阅读 · 0 评论 -
const 关键字
在类中,如果你不希望某些数据被修改,可以使用const关键字加以限定。const 可以用来修饰成员变量、成员函数以及对象。const 成员变量:const 成员变量的用法和普通 const 变量的用法相似,只需要在声明时加上 const 关键字。初始化 const 成员变量只有一种方法,就是通过参数初始化表。const 成员函数:const 成员原创 2017-11-22 21:48:16 · 218 阅读 · 0 评论 -
static 静态成员变量和静态成员函数
static静态成员变量:对象的内存中包含了成员变量,不同的对象占用不同的内存,这使得不同对象的成员变量相互独立,它们的值不受其他对象的影响。有时候我们希望在多个对象之间共享数据,对象 a 改变了某份数据后对象 b 可以检测到。在C++中,我们可以使用静态成员变量来实现多个对象共享数据的目标。静态成员变量是一种特殊的成员变量,它被关键字static修饰。原创 2017-11-22 21:47:52 · 268 阅读 · 0 评论 -
this指针
this定义:this 是 C++ 中的一个关键字,也是一个 const 指针,它指向当前对象,通过它可以访问当前对象的所有成员。例如:void Student::setname(char *name){this->name = name;}void Student::setage(int age){this->age = age;}原创 2017-11-22 21:47:02 · 294 阅读 · 0 评论 -
浅谈C++内联函数
定义:内联函数(Inline Function)指在函数调用处直接嵌入函数体的函数。即在编译时将函数调用处用函数体替换,类似于C语言中的宏展开,又称内嵌函数或者内置函数。指定方式:在函数定义处(不是声明处)增加 inline 关键字。类体内部定义的函数默认就是内联函数。在类体中定义的成员函数会自动成为内联函数,在类体外定义的不会(如果想让其成为内联函原创 2017-11-21 22:15:17 · 458 阅读 · 0 评论 -
浅谈C++多态
什么是多态:多态性即“一个接口,多种方法”,分为静态的多态和动态的多态。静态的多态在编译期间实现,例如函数的重载。动态的多态在程序执行的期间通过虚函数来实现。并且只有在基类指针指向派生类,而且派生类的虚函数遮蔽基类的虚函数(函数原型相同),这个时候调用虚函数(子类的)才能体现多态。几点要求:(1)只需要在虚函数的声明处加上 virtual 关键字,函数定原创 2017-12-11 21:16:39 · 164 阅读 · 0 评论 -
纯虚函数和抽象类
纯虚函数:在C++中,可以将虚函数声明为纯虚函数,语法格式为:virtual 返回值类型 函数名 (函数参数) = 0;纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数。最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。抽象类:包含纯虚函数的类称为原创 2017-12-11 21:17:50 · 363 阅读 · 0 评论 -
C++运算符重载
运算符重载的概念和语法:运算符也是一种函数,所以运算符重载和函数重载一样,同一个运算符可以有不同的功能。运算符重载的格式为:返回值类型 operator 运算符名称 (形参表列){//TODO:}C++运算符重载的规则:1) 并不是所有的运算符都可以重载。能够重载的运算符包括:+ - * / % ^ & | ~ ! = += -原创 2017-12-11 21:20:45 · 248 阅读 · 0 评论 -
C++ 模板
函数模板:所谓函数模板,实际上是建立一个通用函数,它所用到的数据的类型(包括返回值类型、形参类型、局部变量类型)可以不具体指定,而是用一个虚拟的类型来代替(实际上是用一个标识符来占位),等发生函数调用时再根据传入的实参来逆推出真正的类型。这个通用函数就称为函数模板(Function Template)。例://template 模板关键字 返回值类型 函数名 参数列表原创 2017-12-12 21:29:17 · 173 阅读 · 0 评论 -
C 和 C++的比较
C是一个结构化语言,它的重点在于算法和数据结构。C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现过程(事务)控制)即C是面向过程的。C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事务)控制及C++是面向过程的。所以C与C++的最大区别在于它们的用于解决问题的原创 2017-11-21 22:12:06 · 538 阅读 · 0 评论 -
C++ String类 详解
string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常 ;原创 2017-12-13 20:52:15 · 277 阅读 · 0 评论 -
C++学习笔记 ---- 重载
与返回值类型无关: void show(int){} int show(int){} 错误,同一个函数至少要两个函数;只有一个函数,调用形参不同做类型转换不是重载原创 2017-11-18 13:36:53 · 180 阅读 · 0 评论