C++
文章平均质量分 88
赵小咖
每天努力一点点
展开
-
Liunx之网络编程
Liunx网络编程进程线程TCP/IP协议簇并发编程操作系统进程进程:资源分配的最小单元,操作系统执行的最小单位;Linux对进程采用了一种层次系统,每个进程都依赖于一个父进程。内核启动init程序作为第一个进程,该进程负责进一步的系统初始化操作,并显示登录提示符或图形登录界面(现在使用比较广泛)。因此init是进程树的根,所有进程都直接或间接起源自该进程。fork()函数可以创建当前进程...原创 2019-04-16 17:31:10 · 648 阅读 · 0 评论 -
VS2013/MFC编程入门之八(对话框:为控件添加消息处理函数)
创建对话框类和添加控件变量在上一讲中已经讲过,这一讲的主要内容是如何为控件添加消息处理函数。 MFC为对话框和控件等定义了诸多消息,我们对它们操作时会触发消息,这些消息最终由消息处理函数处理。比如我们点击按钮时就会产生BN_CLICKED消息,修改编辑框内容时会产生EN_CHANGE消息等。一般为了让某种操作达到效果,我们只需要实现某个消息的消息处理函数。原创 2016-11-24 21:09:20 · 12470 阅读 · 9 评论 -
VS2013/MFC编程入门之六(对话框:为对话框添加控件)
创建对话框资源需要创建对话框模板、修改对话框属性、为对话框添加各种控件等步骤,前面一讲中已经讲了创建对话框模板和修改对话框属性,本节继续讲如何为对话框添加控件。 上一讲中创建了一个名为“Addition”的工程,目的是生成一个实现加法运算的应用程序。实现加法计算有几个必要的因素:被加数、加数、和。被加数和加数需要输入,和需要输出显示。那么这几个因素都需要相应的控件来输入或显示,原创 2016-11-23 17:07:18 · 20042 阅读 · 2 评论 -
VS2013/MFC编程入门之五(对话框:创建对话框模板和修改对话框属性)
在上一讲中介绍了MFC的消息映射机制,属于原理方面的知识。对于VC++编程入门学习者来说可能有些抽象,本文会把消息映射的知识渗透到后面的教程中。本节开始为大家讲解偏应用的知识-创建对话框。 对话框,大家应该很熟悉了,在我们常用的软件中大多都有对话框界面,例如,qq的主界面其实就是个对话框,只是它做了很多美工方面的工作,将其大大美化了。 创建对话框主要分两大步原创 2016-11-23 16:32:18 · 16652 阅读 · 1 评论 -
VS2013/MFC编程入门之四(MFC消息映射机制概述)
上一讲为大家简单分析了MFC应用程序框架,这一讲是关于MFC消息映射机制的内容。 前面已经说过,Windows应用程序是消息驱动的。在MFC软件开发中,界面操作或者线程之间通信都会经常用到消息,通过对消息的处理实现相应的操作。比较典型的过程是,用户操作窗口,然后有消息产生,送给窗口的消息处理函数处理,对用户的操作做出响应。 什么是消息 窗原创 2016-11-23 11:00:32 · 4557 阅读 · 1 评论 -
VS2013/MFC编程入门之三(MFC应用程序框架分析)
上一讲讲的是VS2013应用程序工程中文件的组成结构。这一节就为大家分析下MFC应用程序框架的运行流程。 一.SDK应用程序与MFC应用程序运行过程的对比 程序运行都要有入口函数,在之前的C++教程中都是main函数,而Windows应用程序的入口函数是WinMain函数,MFC程序也是从WinMain函数开始的。下面就给出用Windows SDK写的“He原创 2016-11-23 10:12:39 · 7533 阅读 · 4 评论 -
VS2013/MFC编程入门之二(VS2013应用程序工程中文件的组成结构)
在上一讲中为大家演示了如何利用应用程序向导创建单文档应用程序框架。这一节将以上一讲中生成应用程序HelloWorld的文件结构为例,讲解VS2013应用程序工程中文件的组成结构。 用应用程序向导生成框架程序后,我们可以在之前设置的位置下看到以解决方案名命名的文件夹,此文件夹中包含了几个文件和一个以工程名命名的子文件夹,这个子文件夹中又包含了若干个文件和一个res文件夹,创建工程原创 2016-11-22 22:23:33 · 5668 阅读 · 0 评论 -
C++编程入门系列之五十(异常处理)
关于面向对象设计的重要特性--多态性到上一节纯虚函数和抽象类就讲完了。这一讲是本C++编程入门教程的最后一讲--异常处理。 我们开发的软件一般按照正常的流程操作时运行不会出问题,但是用户不一定会根据软件工程师的想法来操作软件,而且往往随机性很大,另外,软件的运行环境也会改变,例如硬盘空间不足、文件被移走,这些都可能会导致软件出现异常,甚至崩溃。所以我们进行软件开发时要充分考虑异转载 2016-11-22 16:24:25 · 341 阅读 · 0 评论 -
C++编程入门系列之四十九(多态性:纯虚函数和抽象类)
上一讲中讲了多态性中的重要概念,虚函数。本节主要讲解另一个软件开发中经常用到的多态概念--抽象类。 抽象类可以为某个类族提供统一的操作接口。外部可以透明的使用抽象类的统一接口,而不需要知道到底是调用的抽象类的哪个派生类的成员函数。其实这些也可以通过在基类中定义虚函数来实现,但抽象类跟一般类不同的是,它使用纯虚函数,不需要定义纯虚函数的实现,而且抽象类不能实例化,即不能定义抽象类转载 2016-11-22 16:07:37 · 405 阅读 · 0 评论 -
C++编程入门系列之四十八(多态性:虚函数)
前一讲的是运算符重载为类的友员函数。今天讲的是属于包含多态的虚函数。 一.虚函数的意义 在讲赋值兼容规则时给出了一个程序例子,其中包含类Base、Child0和Child1。在程序运行结果中我们看到,main函数中Base类型的指针pBase,分别指向Base、Child0和Child1类的对象时调用的show函数都是基类Base的show函数。因为基类类型转载 2016-11-22 15:52:02 · 345 阅读 · 0 评论 -
C++编程入门系列之四十七(多态性:运算符重载为类的友元函数)
在上一节中讲了运算符重载为类的成员函数的方式和规则,这一节接着讲运算符重载的另一种方式--运算符重载为类的友元函数。 在编程入门系列之二十二--友元中讲到过,友元函数通过类的对象可以访问类的公有、保护和私有成员,也就是类的所有成员友元函数都能访问到。所以运算符重载为类的友元函数以后也可以访问类的所有成员。 与运算符重载为成员函数时不同的是,重载的友元函数不属转载 2016-11-22 15:27:31 · 2341 阅读 · 0 评论 -
C++编程入门系列之四十六(多态性:运算符重载为类的成员函数)
上一节中讲到了运算符重载的概念和规则,运算符可以重载为类的成员函数或友元函数,这一节就来讲讲运算符怎样重载为类的成员函数。 运算符重载为类的成员函数后就可以像其他成员函数一样访问本类的数据成员了。在类的外部通过类的对象,可以像原运算符的使用方式那样使用重载的运算符,比如,“+”运算符被重载为类A的成员函数后,A的对象a和其他对象b就可以这样进行加法运算:a+b。转载 2016-11-21 08:55:13 · 366 阅读 · 0 评论 -
C++编程入门系列之四十五(多态性:运算符重载的概念和规则)
上一节讲了多态性的概念和类型,多态有四种类型:重载多态、强制多态、参数多态和包含多态。这一节主要介绍重载多态中的运算符重载。 一.运算符重载的概念 为什么我们需要运算符重载?因为自定义数据类型有时也需要使用运算符进行某些运算,比如加法运算,但是预定义的运算符的操作数只能是基本数据类型,所以自定义数据类型的运算需要进行运算符重载。例如,有日期类Date声明如下转载 2016-11-21 08:48:48 · 317 阅读 · 0 评论 -
C++编程入门系列之四十四(多态性:多态的概念和类型)
上一节讲完赋值兼容规则后,编程入门中继承与派生的部分就讲完了。今天开始讲解面向对象设计中的多态性。 先介绍一个概念:消息。消息在C++编程中指的是对类的成员函数的调用。多态就是指相同的消息被不同类型的对象接收会引起不同的操作,直接点讲,就是在不同的情况下调用同名函数时,可能实际调用的并不是同一个函数。 以“+”运算符为例,“+”可以实现整型变量之间、浮点型变转载 2016-11-21 08:26:07 · 890 阅读 · 0 评论 -
C++编程入门系列之八(函数的定义与调用)
上一讲鸡啄米给大家讲了自定义数据类型,这一节鸡啄米给大家讲讲编程入门时另一个比较重要的概念,函数。一个复杂的问题往往可以分为若干子问题,然后对每个子问题分别解决。C++和C语言就是用函数来解决子问题的。函数写好以后,可以被重复调用,我们调用时只需要关注它的功能和使用方法,至于它时怎样实现的我们不需要关心。这样有利于代码重用,提高开发效率,便于分工开发和维护。 一个C++程序可以由一转载 2016-10-05 16:47:23 · 1235 阅读 · 0 评论 -
C++编程入门系列之四十三(继承与派生:赋值兼容规则)
上一节讲了虚基类及其派生类的构造函数,本节来讲讲赋值兼容规则。 前面说过,派生类如果是从基类公有继承的,则它会包含基类中除构造函数和析构函数外的所有成员,基类的公有成员也成为派生类的公有成员,又因为对象只能访问类的公有成员,所以基类对象具有的功能,派生类对象都有。这样就引出了赋值兼容规则。 赋值兼容规则就是指在基类对象可以使用的地方都可以用公有派生类对象来代转载 2016-11-20 22:32:41 · 322 阅读 · 0 评论 -
C++编程入门系列之四十二(继承与派生:虚基类及其派生类的构造函数)
在上一讲中讲了作用域分辨符。今天主要讲解虚基类及其派生类的构造函数。 1.虚基类的概念及用法 上一讲中说过,如果派生类的全部或者部分基类有共同的基类,那么派生类的这些直接基类从上一级基类继承的成员都具有相同的名称,定义了派生类的对象后,同名数据成员就会在内存中有多份拷贝,同名函数也会有多个映射。访问这些同名成员时,为了唯一标识它们可以使用上一讲中的作用域分辨转载 2016-11-20 21:56:02 · 516 阅读 · 0 评论 -
VS2013/MFC编程入门之七(对话框:创建对话框类和添加控件变量)
前两讲中为大家讲解了如何创建对话框资源。创建好对话框资源后要做的就是生成对话框类了。再声明下,生成对话框类主要包括新建对话框类、添加控件变量和控件的消息处理函数等。 因为给大家的例程Addition是基于对话框的程序,所以程序自动创建了对话框模板IDD_ADDITION_DIALOG,并自动生成了对话框类CAdditionDlg,它是从CDialogEx类派生的。大家用过VC+原创 2016-11-23 22:14:45 · 19038 阅读 · 13 评论 -
C++编程入门系列之三(数据类型)
C++是从C中发展来的,可以兼容C。所以C++的一些基本语法跟C几乎是一样的。 先给大家看下一个简单的C++程序。 #include void main(void) { cout } #include 告诉编译器对程序进行预处理时,就是在编译前的一个阶原创 2016-10-05 16:35:45 · 589 阅读 · 0 评论 -
VS2013/MFC编程入门之三十八(文档、视图和框架:分割窗口)
上一节中讲了文档、视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口。 分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型的视图,或者是不同类型的视图。 MFC分割窗口的方式有两种,动态分割和静态分割。 动态分割窗口通常用于创建同一个文档对应的多个视图原创 2017-02-15 21:19:28 · 4088 阅读 · 0 评论 -
C++之常用排序算法
#include<iostream>#include<vector>using namespace std;//冒泡排序void Bubble_Sort(vector<int> &vec){ int temp = 0; for (int i = 0; i < vec.size()-1; i++) { for (int j =...原创 2019-04-16 17:26:00 · 224 阅读 · 0 评论 -
C++之STL仿函数、内存池、Lambda表达式
C++之STL仿函数仿函数内存池Lambda表达式仿函数要将某种“操作”当做算法的参数,唯一办法就是先将该“操作”(可能拥有数条以上的指令)设计为一个函数,再将函数指针当做算法的一个参数;或是将该“操作”设计为一个所谓的仿函数(就语言层面来说是个class),再以该仿函数产生一个对象,并以此对象作为算法的一个参数。根据以上陈述,既然函数指针可以达到“将整组操作当做算法的参数”,那又何必有所谓...原创 2019-04-16 17:21:00 · 441 阅读 · 0 评论 -
C++之STL空间置配器
STL之空间置配器空间配置器(SGI版)二级空间配置器的逻辑步骤:空间配置器的其他问题空间配置器(SGI版)STL里面的空间配置主要分为两级,一级空间配置器(__malloc_alloc_template)和二级空间配置器(__default_alloc_template)。在STL中默认如果要分配的内存大于128个字节的话就是大块内存,调用一级空间配置器直接向系统申请,如果小于等于128个字...原创 2019-04-16 17:18:10 · 324 阅读 · 2 评论 -
C++之STL常用函数及原理
C++之STL常用函数及原理lower_boundupper_boundbinary_serachrandom_shufflepartial_sortpartial_sort_copysortequal_rangeinplace_range(应用于有序序列)nth_elementlower_bound作用:在有序区间上寻找值为value的位置;Interator lower_bound(In...原创 2019-04-16 17:16:19 · 1033 阅读 · 0 评论 -
C++字符和数字、字符大小写之间的转换
#include<iostream>int main(){ //其实就是对ASCii表的操作 string s; char a = 'a'; int b = a - '0'; //字符转成数字 int c = (int)a; //就是ASC码十进制值,不加(int)也会隐式转 char ch=b+'0'; /...原创 2018-07-21 23:30:02 · 4611 阅读 · 0 评论 -
c++ list, vector, map, set 区别与用法比较
List封装了链表,Vector封装了数组, list和vector得最主要的区别在于vector使用连续内存存储的,他支持[]运算符,而list是以链表形式实现的,不支持[]。Vector对于随机访问的速度很快,但是对于插入尤其是在头部插入元素速度很慢,在尾部插入速度很快。List对于随机访问速度慢得多,因为可能要遍历整个链表才能做到,但是对于插入就快的多了,不需要拷贝和移动数据,只需要改变...转载 2018-07-21 23:05:49 · 286 阅读 · 0 评论 -
C++值传递、引用传递和传指针的区别
传值传递的是是实参的拷贝,实参不会被修改;#include<iostream>void swap(int a, int b){ int temp = a; a = b; b = temp;}int main(){ int a = 5, b = 10; swap(a, b); std::cout << "a = " << a <...原创 2018-07-21 22:53:50 · 316 阅读 · 0 评论 -
C++中指针和引言的区别
指针和引用的定义和性质区别:(1)指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用的实质上是原变量的一个别名。如:int a=1;int *p=&a;int a=1;int &b=a;上面定义了一个整形变量和一个指针变量p,该指针变量指向a的存储单元,即p的值是a存储单元的地址。而下面2句定义了一个整形变量a和这个整形a的...原创 2018-07-21 22:41:53 · 206 阅读 · 0 评论 -
前置++和后置++的区别
++a表示取a的地址,增加它的内容,然后把值放在寄存器中;a++表示取a的地址,把它的值装入寄存器,然后增加内存中的a的值;前置++和后置++,有4点不同:返回类型不同 形参不同 代码不同 效率不同1、返回类型前置++的返回类型是&,后置++的返回类型const值。这意味着,前置++返回的是左值(可以被修改,也就是说可以对它进行前置++、后置++、赋值等操作),后置...原创 2018-07-21 22:25:21 · 6314 阅读 · 0 评论 -
C++变量申明和定义的关系
为了允许程序拆分成多个逻辑部分进行编写,C++语言支持分离式编译机制,该机制允许将程序分割成若干个文件,每个文件可被独立编译。 如果将程序分为多个文件,则需要有在文件间共享代码的方法。例如,一个文件的代码可能需要使用另一个文件中定义的变量。一个实际的例子就是std::cin和std::cout,他们定义于标准库中,却能被我们写的程序使用。 为了支持分离式编译,C++原创 2017-06-12 15:05:26 · 743 阅读 · 0 评论 -
在c++中怎么创建命名空间
什么是命名空间呢?举一个现实中的例子,命名空间就像是一个企业,每个企业都有自己的员工。在这里假设每一个员工代表一个类,于是每一个命名空间中都包含若干个类。优于命名空间不同,编译器就可以将同名的类区别开来。这就像企业A中有个叫“张三”,企业B也有个叫“张三”的。但是由于两个企业不同,人们还是可以把两个人区分开来。使用命名空间的方式有以下两种:方法一:#include"iostream"原创 2017-05-13 11:35:34 · 10284 阅读 · 0 评论 -
C++之模板
C++程序是由函数和类组成的,座椅模板也分为类模板和函数模板。模板就是把功能相似、仅数据类型不同的函数或类设计为通用的函数模板或类模板,提供给用户。模板是“泛型编程”的基础,所谓泛型编程就是用独立于任何特定类型的方式编写代码。所以简单地说,类是对象的抽象,而模板又是类的抽象,用模板能定义出具体类。模板的语法:函数模板的一般定义形式为:Template或typename T>返回类型原创 2017-04-03 10:22:40 · 584 阅读 · 0 评论 -
c++:文件操作
打开文件1.用文件流的成员函数open()打开文件ifstream,ofstream、fstream等三个文件流类中各有一个成员函数open():voidifstream::open(const char *, int = ios::in, int = filebuf::openprot);voidofstream::open(const char *, int = ios::ou原创 2017-03-03 21:18:12 · 776 阅读 · 0 评论 -
VS2013/MFC编程入门之三十九(MFC常用类:CString类)
上一节讲了分割窗口的有关知识,本节开始讲解MFC的一些常用类,先来说说CString类。 CString类简介 CString类作为MFC的常用类,当之无愧。可以这样说,只要是从事MFC开发,基本都会遇到使用CString类的场合。因为字符串的使用比较普遍,而CString类又提供了对字符串的便捷操作,所以它给MFC开发人员带来了高的开发效率,受到了开发者的原创 2017-02-15 21:43:22 · 3482 阅读 · 0 评论 -
C++编程入门系列之四十一(继承与派生:作用域分辨符)
在前两节中讲了派生类的构造函数和析构函数,现在来讲讲通过作用域分辨符访问派生类成员的问题。 访问派生类的成员有可见性和唯一性两个问题,我们只能访问到具有唯一性的可见成员。 先说说可见性的问题。如果有两个以上具有包含关系的作用域,外层作用域中的标识符在内层作用域中没有同名标识符则它在内层作用域中也是可见的,但是如果在内层作用域中存在同名标识符则外层的标识符被屏转载 2016-11-20 10:22:32 · 368 阅读 · 0 评论 -
C++编程入门系列之四十(继承与派生:派生类的析构函数)
在三十九中讲了派生类的构造函数,提到构造函数就不能不说析构函数,这一节主要讲讲派生类析构函数的相关内容。 派生类的析构函数也是在派生类对象释放的时候进行清理工作的。前面说过,派生类无法继承基类的析构函数,所以如果需要的话就要自己定义析构函数。派生类析构函数的定义方式与一般类的析构函数是一样的,也是没有返回类型,没有参数,所以比构造函数需要注意的东西少多了。转载 2016-11-20 10:16:24 · 291 阅读 · 0 评论 -
C++编程入门系列之十三(类与对象:类的声明、成员的访问控制和对象)
这一讲开始讲面向对象设计中最重要的概念--类,及由类引申出来的一些知识。 在面向过程的设计中,程序的模块是函数构成的,而面向对象设计中程序模块是类构成的。函数只是语句和数据的封装,而类是函数与数据的封装,对比下肯定是面向对象设计更重量级了,更适合大型程序的开发。 其实,类就是一种自定义数据类型,跟一般的类型如int、char等有很多相似之处。我们可以定义in转载 2016-10-07 10:01:43 · 443 阅读 · 0 评论 -
C++编程入门系列之十一(类与对象:面向对象设计的基本思想和特点)
上一讲鸡啄米讲了函数重载和函数模板以后,C++和C语言相似的语法就剩下后面要讲的数组了,这一讲开始鸡啄米就要讲C++所特有的一些概念和思想了。本节编程入门教程主要讲面向对象程序设计的基本思想和特点。另外,说明一点,以后鸡啄米会加一个大的教程分类,让大家更好的对琐碎的知识进行分类,比如这一讲的大的分类叫“类与对象”,标题是面向对象设计的基本思想和特点。 在编程入门教程的前言中,鸡啄米转载 2016-10-05 16:57:18 · 464 阅读 · 0 评论 -
C++编程入门系列之十(重载函数与函数模板)
hello,everyone,鸡啄米上一节讲到的是函数的参数传递和内联函数,这一讲鸡啄米会给大家讲点稍微有点难度的函数重载和函数模板,如果大家把之前的编程入门课程都掌握了,这一讲的内容自己上机试下就很容易理解了。 一.重载函数 现实生活中的一个词可能有多种含义,比如,洗衣服、洗头、洗车,都有一个洗字,但是他们的操作方式是不一样的。函数也一样,有时候它们的操作不完全一样但转载 2016-10-05 16:52:04 · 481 阅读 · 0 评论 -
C++编程入门系列之九(函数的参数传递与内联函数)
让大家了解编程入门时需要知道的函数的参数是怎样传递的以及内联函数的概念。 一.函数的参数传递 上一讲中鸡啄米提到了函数的参数有形参和实参两种,那两者到底有什么区别呢?我们在声明及定义函数的时候跟的参数叫做形参,调用函数时传进去的参数称为实参。比如,函数int fun(int a),这里的a就是形参,我们在其他地方调用函数fun,将外部的变量b传进去,即fun(b),转载 2016-10-05 16:49:48 · 511 阅读 · 0 评论