C++
One-Direction
这个作者很懒,什么都没留下…
展开
-
UML图中类之间的关系:依赖,泛化,关联,聚合,组合,实现
类与类图类(Class)封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称。在系统中,每个类具有一定的职责,职责指的是类所担任的任务,即类要完成什么样的功能,要承担什么样的义务。一个类可以有多种职责,设计得好的类一般只有一种职责,在定义类的时候,将类的职责分解成为类的属性和操作(即方法)。类的属性即类的数据职责,类的操作即类的行为职责一、依赖关系(...转载 2020-04-29 18:25:18 · 1751 阅读 · 1 评论 -
字典序输出全排列
首先看什么叫字典序,顾名思义就是按照字典的顺序(a-z, 1-9)。以字典序为基础,我们可以得出任意两个数字串的大小。比如 “1” < “12”<“13”。 就是按每个数字位逐个比较的结果。对于一个数字串,“123456789”, 可以知道最小的串是 从小到大的有序串“123456789”,而最大的串是从大到小的有序串“*987654321”。这样对于“123456789”的所有排列,...转载 2020-04-19 16:55:05 · 3336 阅读 · 0 评论 -
全排列递归算法详细解释(非字典序)
字典序输出请点击 字典序输出全排列中心思想设R={r1,r2,…,rn}是要进行排列的n个元素,Ri=R-{ri}.Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列。当n=1时,Perm(R)=(r),其中r是集合R中唯一的元素;当n>1时,Perm®可由(r1)+Perm(R1),(r2)+Perm(R2),…,(rn)+Perm(Rn)构成。...转载 2020-04-19 11:58:03 · 442 阅读 · 0 评论 -
( ++a )和( a++ )相关顺序问题
/* 这个例子主要是考虑到a++和++a的存储问题; 我们知道,对于a++是先将a给表达式再++; 那么这就是需要一个tmp空间来保存++之前 的a!!!但是对于++a是不需要的,因为先 执行++,那么就是直接改a空间内容就好了! 那么我们下面的问题就是这样!*/ #include <stdio.h> int main(){ int a = 4; /...转载 2020-04-16 00:01:31 · 552 阅读 · 0 评论 -
C++中构造函数,拷贝构造函数和赋值函数的区别和实现
C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法。下面就详细比较下三者之间的区别以及它们的具体实现1.构造函数构造函数是一种特殊的类成员函数,是当创建一个类的对象时,它被调用来对类的数据成员进行初始化和分配内存。(构造函数的命名必须和类名完全相同)首先说一下一个C++的空类,编译器会加入哪些默认的成员函数默认构造函数和拷贝构造函数析构函数...转载 2020-04-15 23:10:25 · 174 阅读 · 0 评论 -
C++ 宏定义 #define 和常量 const 的区别
类型和安全检查不同宏定义是字符替换,没有数据类型的区别,同时这种替换没有类型安全检查,可能产生边际效应等错误;const常量是常量的声明,有类型区别,需要在编译阶段进行类型检查编译器处理不同宏定义是一个"编译时"概念,在预处理阶段展开,不能对宏定义进行调试,生命周期结束于编译时期;const常量是一个"运行时"概念,在程序运行使用,类似于一个只读行数据存储方式不...转载 2020-04-15 19:46:59 · 158 阅读 · 0 评论 -
为什么对于类的const成员,只能使用初始化列表,而不能在构造函数内部进行赋值操作
构造函数不能被声明为const函数,因此当我们创建一个类的const对象时,直到构造函数完成初始化的过程,对象才真正取得其“常量”的属性,因此,构造函数在const对象的构造过程中可以向其写值;见C++ primer P235;初始化类的成员有两种方式,一是使用初始化列表,二是在构造函数体内进行赋值操作。因此,由于常量只能初始化不能赋值,所以常量成员必须使用初始化列表;[1](当然你可...转载 2020-04-15 19:39:46 · 1358 阅读 · 0 评论 -
c++ 类中static变量初始化问题
首先static变量只有一次初始化,不管在类中还是在函数中…有这样一个函数:void Foo(){ static int a=3; // initialize std::cout << a; a++;}这里的static int a=3只执行了一次。在main中调用Foo()两次,结果为34.将上面的函数改为void Foo(){ static int a;...转载 2020-04-15 19:28:42 · 1399 阅读 · 0 评论 -
C语言中宏定义的使用
1. 引言预处理命令可以改变程序设计环境,提高编程效率,它们并不是 C 语言本身的组成部分,不能直接对 它们进行编译,必须在对程序进行编译之前,先对程序中这些特殊的命令进行“预处理” 。经过预处理后,程序就不再包括预处理命令了,最后再由编译程序对预处理之后的源程序进行编译处理,得到可供执行的目标代码。C 语言提供的预处理功能有三种,分别为宏定义、文件包含和条件编译。1.1 宏定义的基本语法...转载 2020-04-15 18:39:27 · 2041 阅读 · 0 评论 -
进程和线程的深入理解
抽象类比:单CPU:一台单核处理器计算机 = 一个车间;多CPU:一台多核处理器计算机 = 一座工厂;进程:一个车间 = 一个进程; (即一个运行的程序)多进程:一座工厂可以同时运行多个车间;CPU和进程:单CPU只能同时运行单个进程,多CPU可以同时运行多个进程。线程:车间内一个工人 = 一个线程;进程与线程:一个进程可以包括多个线程。线程间内存共享:车间的空间是工人们共享的,比...转载 2020-03-31 23:37:58 · 154 阅读 · 0 评论 -
C++11新特性
1.Initiallizer listC++11 提供了统一的语法来初始化任意的对象,例如:struct A { int a; float b;};struct B { B(int _a, float _b): a(_a), b(_b) {}private: int a; float b;};A a {1, 1.1}; // 统一的初...转载 2020-03-31 15:27:35 · 253 阅读 · 0 评论 -
红黑树漫画理解
程序员小灰转载 2020-03-31 13:58:43 · 174 阅读 · 0 评论 -
void* 详解及应用
void 在英文中作为名词的解释为 “空虚、空间、空隙”,而在 C 语言中,void 被翻译为"无类型",相应的void * 为"无类型指针"。void 似乎只有"注释"和限制程序的作用,当然,这里的"注释"不是为我们人提供注释,而是为编译器提供一种所谓的注释。void 的作用1.对函数返回的限定,这种情况我们比较常见。2.对函数参数的限定,这种情况也是比较常见的。一般我们常见的...转载 2020-03-31 12:28:28 · 248 阅读 · 0 评论 -
C++基类和派生类指针的相互赋值和转换
在公有派生的情况下,派生类的指针可以直接赋值给基类指针。但即便基类指针指向的是一个派生类的对象,也不能通过基类指针访问基类没有而派生类中有的成员。基类的指针不能赋值给派生类的指针。但是通过强制类型转换,也可以将基类指针强制转换成派生类指针后再赋值给派生类指针。只是在这种情况下,程序员需要保证被转换的基类指针本来就指向一个派生类的对象,这样才是安全的,否则很容易出错。下面的代码演示了基类和派...转载 2020-03-30 23:00:12 · 1705 阅读 · 1 评论 -
面向对象四大特性
面向对象主要有四大特性1、抽象忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面。(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来的一般叫做类或者接口)。抽象并不打算了解全部问题,而是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一个数据抽象,而是过程抽象。数据抽象 -->表示世界中一类事物的特征,就是对象的属性。比如鸟有翅膀,羽毛等(类的属性...转载 2020-03-30 15:54:12 · 341 阅读 · 0 评论 -
什么是内存对齐?为什么要内存对齐?
什么是内存对齐关于什么是内存对齐,我们先来看几个例子:typedef struct { int a; double b; short c;}A;typedef struct { int a; short b; double c;}B;分别对他们求大小,sizeof(A),sizeof(B)我们所得到的结果是不同的:sizeof(A)...转载 2020-03-30 11:39:59 · 295 阅读 · 0 评论 -
位域——C
位域的定义和规定有些数据在存储时并不需要占用一个完整的字节,只需要占用一个或几个二进制位即可。例如开关只有通电和断电两种状态,用 0 和 1 表示足以,也就是用一个二进位。正是基于这种考虑,C语言又提供了一种叫做位域的数据结构。在结构体定义时,我们可以指定某个成员变量所占用的二进制位数(Bit),这就是位域。请看下面的例子:struct bs{ unsigned m; u...转载 2020-03-30 11:29:05 · 378 阅读 · 0 评论 -
为什么一个指针在32位系统中占4个字节,在64位系统中占8个字节?
结论一个指针在64位的计算机上,占8个字节;一个指针在32位的计算机上,占4个字节。原因我们都知道cpu是无法直接在硬盘上读取数据的,而是通过内存读取。cpu通过地址总线、数据总线、控制总线三条线对内存中的数据进行传输和操作。具体流程:1. cpu通过地址总线,找到该条数据;2. 通过控制总线得知该操作是读操作还是写操作;3. 通过数据总线将该数据读取到cpu或者从cpu写到...转载 2020-03-29 18:33:37 · 1363 阅读 · 0 评论 -
垂悬指针,哑指针,野指针,智能指针
垂悬指针定义:指针正常初始化,曾指向一个对象,该对象被销毁了,但是指针未制空,那么就成了悬空指针。解决策略: 引入智能指针可以防止垂悬指针出现。一般是把指针封装到一个称之为智能指针类中,这个类中另外还封装了一个使用计数器,对指针的复制等操作将导致该计数器的值加1,对指针的delete操作则会减1,值为0时,指针为NULL。哑指针哑指针指传统的C/C++指针,它只是一个指向,除此以外它不会...转载 2020-03-28 20:58:58 · 399 阅读 · 0 评论 -
虚析构函数
虚析构函数使得在删除指向子类对象的基类指针时可以调用子类的析构函数达到释放子类中堆内存的目的,而防止内存泄露的。首先看一段示例代码:class A{public: ~A(){}};class AX : public A{public: ~AX(){}};A* pA = new AX{};delete pA;上面代码中 class AX 的析构函数...转载 2020-03-27 19:07:00 · 628 阅读 · 0 评论 -
栈帧
什么是栈?在数据结构中, 栈是限定仅在表尾进行插入或删除操作的线性表。栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。在计算机系统中,栈也可以称之为栈内存是一个具有动态内存区域,存储函数内部(包括main函数)的局部变量和方法调用和函数参数值,是由系统自动分配的,一般速度较快;存储地址是连续且存在有限栈容量,会...转载 2020-03-27 15:25:16 · 215 阅读 · 0 评论 -
百词斩笔试题:26进制加法
描述两个大整数相加,每一位是一个小写字母,二十六进制,a表示0,z表示25,求结果。例如:输入:z 和 bc输出: cb实现#include <iostream>#include<cstring>using namespace std;int main() { string s[2]; int l1,l2; for(int i=...原创 2019-08-07 10:28:46 · 257 阅读 · 0 评论 -
C++11多线程
多线程和多进程每运行一个.exe文件即创建了一个进程,每个进程会自动生成一个主线程来执行程序,我们可以创建其它的非主线程来执行其他的程序以达到并发并发的手段:多进程同一个进程下多线程不同进程下多线程与多进程进程间的通信同一个电脑:管道,文件,消息队列,共享内存不同的电脑:socket通信技术C++11标准线程库以往用操作系统实现多线程:windows...原创 2019-07-17 23:17:26 · 121 阅读 · 0 评论 -
C++常用知识(二)
在整个继承结构中,直接或间接继承虚基类的所有派生类,都必须在构造函数的成员初始化列表中给出对虚基类的构造函数的调用。但是, 在建立对象时,只有最远派生类的构造函数调用虚基类的构造函数cout()调用在函数调用之后setiosflags(ios::fixed)是用定点方式表示实数。使用setprecision(n)可控制输出流显示浮点数的数字个数。C++默认的流输出数值有效位是6。如...原创 2019-07-12 12:28:32 · 168 阅读 · 0 评论 -
C++常用知识点(一)
①常对象只能调用常成员函数和常成员变量②常成员函数的const放在最后,且不能修改成员变量,只能调用常成员函数。③常成员变量和子对象初始化必须用初始化列表④静态常成员变量和静态成员变量一样在类外初始化,不能调用非静态成员和函数,如果要调用需要加上类实例对象。⑤可以通过构造函数的参数将数据转换为类类型⑥函数重载参数有int为后缀++,否则为前缀++全局友元函数在类中声明⑦=,(),[]...原创 2019-07-08 19:49:01 · 172 阅读 · 0 评论 -
socket实现简单的通信
socketsocket本质是编程接口(API),对TCP/IP的封装,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口;HTTP是轿车,提供了封装或者显示数据的具体形式;Socket是发动机,提供了网络通信的能力。在Internet上的主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。S...翻译 2019-06-15 10:56:52 · 350 阅读 · 0 评论