- 博客(34)
- 收藏
- 关注
转载 基类指针指向派生类对象
父类子类指针函数调用注意事项1,如果以一个基础类指针指向一个衍生类对象(派生类对象),那么经由该指针只能访问基础类定义的函数(静态联翩) 2,如果以一个衍生类指针指向一个基础类对象,必须先做强制转型动作(explicit cast),这种做法很危险,也不符合生活习惯,在程序设计上也会给程序员带来困扰。(一般不会这么去定义) 3,如果基础类和衍生类定义了相同名称的成员函数,那么通过对象...
2018-08-15 11:04:41
12727
5
原创 什么是野指针?应该如何避免?
野指针:指向不确定地址的指针变量。(即没有初始化)使用野指针易因内存泄露出现段错误。而造成内存泄露的原因有两个:1.访问了没有权限的内存(平时我们正确使用指针的时候,系统应经将相应的内存分配给用户,但是如果指向没有分配的内存,系统会判定我们没有权限)2.访问了已经释放了的内存。因为野指针主要是因为我们平时编程习惯造成的,因此我们只能避免野指针的出现,而不能杜绝。(请注意用词)我们在编程...
2018-08-13 20:33:23
278
原创 c语言分配内存方式有哪些?c语言中常见的内存错误有哪些?
内存分配方式有三种: 1、从静态存储区域分配。内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在。例如全局变量,static变量。 2、在栈上创建。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 3、从堆上分配,亦称动态内存分配。程序在运行的时候用m...
2018-08-13 20:26:24
627
转载 编程中设计并发服务器,使用多进程与多线程有什么区别
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?答案一:1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。两者都可以提高程序的并发度,提高程序运行效率和响应时间。线程和进程在使用上各有优缺点:线程执行开销小,但不利于...
2018-08-13 19:07:04
442
原创 八大排序算法总结
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。 算法一:插入排序 插入排序示意图插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对...
2018-08-13 09:03:50
183
原创 快速排序---简解
快速排序是真的块。简单的说一下快排的思想:第一步,找出一个键值,通常取第一个元素,用temp中间变量暂存,left和right为排序范围的左边界和右边界。第二步、从右边找出比temp小的放入i下标的位置。i++。第三步、从i+1的位置往后找到比temp大的值放入j下标处。第四步、知道i >=j..第一次排序做好了,然后重复步骤。。排序left到j - 1,i+1 到r...
2018-08-10 20:54:16
143
原创 两个栈实现队列
思路:stack1 为数据存放的栈,stack2为数据操作的栈,进栈全部放入stack1,出栈的时候,依次把stack1.top放入stack2,然后剩下最后一个的时候,作为返回的值,然后再pop掉,然后再把stack2中的数据再存放进stack1中class Solution{public: void push(int node) { stack...
2018-08-03 15:38:58
98
原创 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示
思路:用位运算来做,与1,第一位保持不变,前面的置0,然后判断,再右移class Solution {public: int NumberOf1(int n) { int i = 0; int count = 0; for(i = 0;i < 32;i++) { if((n&...
2018-08-03 14:48:38
437
原创 基本数据类型所占字节数
16位编译器char :1个字节char*(即指针变量): 2个字节short int : 2个字节int: 2个字节unsigned int : 2个字节float: 4个字节double: 8个字节long: 4个字节long long: 8个字节unsigned long: 4个字节32位编译器char :1个字节char*(即指针变量): 4个字...
2018-08-01 23:00:17
287
原创 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
这个与上一篇是一样的思想。f(n) = f(n-1) + f(n-2) + f(n-3) + ... + f(n-(n-1)) + f(n-n) f(n-1) = f(n-2) + f(n-3) + ... + f(n-(n-1)) + f(n-n) 。所以f(n) = 2*f(n-1)。class Solution {public: int jumpFloorII(...
2018-08-01 14:18:26
1415
1
原创 跳台阶---一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法
一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。题目刚开始我想到的是二叉树。左1右2,后来想想非常的麻烦,然后我找寻了一下规律。f(n) = f(n - 1)+f(n - 2).采用递归或者迭代比较方便,类似斐波那契数列。class Solution {public: int jumpFloor(int number) { ...
2018-08-01 13:51:13
1743
原创 二叉树链表结构实现
拿一段以前老师的代码二叉树的功能/操作:1、初始化2、清空3、构建二叉树4、前、中、后序遍历二叉树5、二叉树的深度 学习二叉树的时候,非常要注意的是,形参是二级指针。前中后序遍历的递归算法,要好好理解。老师的这个代码,个人觉得好在求树的深度,这个当初自己没有想到。#include "string.h"#include "stdio.h" #i...
2018-07-30 21:16:27
2502
原创 双向链表
双向链表的头插尾插和删除。关于链表这一块,其实很简单,只要记得操作的时候,先对新的结点操作,再操作前后。没有编译。可能有问题,仅供参考。/***************************************************************************** FileName: 双向链表.cAuthor: xx Version : ...
2018-07-30 21:10:27
119
原创 队列
简单的写一下队列的操作。/*(1)清空队列(2)判断是否为空(3)元素的个数(4)入队列(5)出队列(6)取对头元素*/#define MAXSIZE 10typedef struct{ int data[MAXSIZE]; int front; int rear;}Squeue;//1清空队列bool clearSqueue(Squeue* q...
2018-07-30 21:05:01
277
原创 静态成员变量和静态成员函数
数据成员可以分静态变量、非静态变量两种:静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所...
2018-07-25 21:28:33
142
原创 队列满与空的条件
充分利用队列的存储空间,我们可以把队列想象成一个首尾相接的圆环,即将队列中的第一个元素接在最后一个元素的后面,我们称这样的队列为循环队列; 队满的条件:(rear+1)%MaxSize = front(此时,循环队列中能装入的元素的个数为MaxSize) 队空的条件:rear=front...
2018-07-25 21:11:29
16080
2
原创 斐波那契
#include "stdio.h"int Fbi(int i) /* 斐波那契的递归函数 */{ if (i < 2) return i == 0 ? 0 : 1; return Fbi(i - 1) + Fbi(i - 2); /* 这里Fbi就是函数自己,等于在调用自己 */}int main(){ int i; int a[40]; printf("...
2018-07-24 19:48:24
209
原创 初始化列表初始化顺序
输出结果为ab初始化列表是按类中声明变量的先后顺序来初始化,与初始化列表的顺序无关。 class Printer{ public: Printer(std::string name) {std::cout << name;}};class Container{ public: Container() : b("b"), ...
2018-07-23 09:15:01
1525
转载 Math.round()
题目大概是问Math.Round(11.5);和Math.Round(-11.5);返回值是多少?原来不是四舍五入这么简单,其实是四舍六入,但是五是很有讲究的。要是遇到五则取离前一位最近的偶数。比如,这条题目,11.5返回值就是12.0;-11.5返回值就是-11.0; 但是这里其实也不是这么简单:看下面的例子:Math.Round(3.44, 1); //Returns 3.4.Ma...
2018-07-23 08:53:10
192
原创 流水灯
#include <reg51.h>#include <delay.h>sbit P1_0 = P1^0;sbit key1 = P0^0;unsigned char state = 1;void main(){ unsigned char i = 0,a = 1; while(1) { if(state == 1) { f...
2018-07-21 20:19:38
240
原创 剑指offer-二维数组中的查找
题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。 从左下角开始判断,小就向上,大就向右 bool Find(int target, vector<vector<int> > array) { ...
2018-07-21 18:27:02
114
原创 class和struct的区别
1.c++中,class和struct的区别: a.成员访问权限->class的成员访问权限为private,而struct的成员访问权限为public b.默认的继承方式->class的默认继承方式为private,而struct的默认继承方式为public2.struct在C和C++之间的区别 a.c中,struct是用户自定义数据...
2018-07-20 13:01:03
220
原创 剑指offer-替换空格
题目描述请实现一个函数,将一个字符串中的每个空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public: void replaceSpace(char *str,int length) { int oldLength = 0,newLength = 0;...
2018-07-19 19:23:47
145
原创 解决QT连续发送数据的问题
在QT的学习网络的学习中,最大的问题是服务器与客户端收发数据的问题,当一方连续发送几次数据给另一方时,容易出现好几种错误:1、收到的数据不全,只有第一个2、收不到3、收到的数据不对readyRead在信号到达时,开始接收,我即使调用几次write,也不能解决这个问题。我尝试了几个方法(发送的是结构体)1、加延时,在write的时候,结果失败;2、加入某博主说的,writ...
2018-07-19 19:18:06
7034
1
转载 VC++常见错误原因解析--error LNK2019: 无法解析的外部符号 "public: void __thiscal
出现这个错误,应该首先查看“#include”语句是否包含,或者是否包含正确。符号无法解析意味着编译器知道有这个符号存在,也就是有声明,但在链接时,找不到实现代码,那么就去看看报错的这个函数有没有实现代码。如果它们的确已经有了,还是出现这个错误,就把它们重新编译一下。根据个人遇到这个错误时的记录,原因可以分为一下几种:原因一:只是在.h里面声明了某个方法,没有在cpp里面实现。具体讲,有时...
2018-04-17 11:08:58
4215
1
原创 定义一个字符串类DelSameStr,从左到右对字符串中每个字符删除其后所有相同的字符,只留下第一次出现的那一个
定义一个字符串类DelSameStr,从左到右对字符串中每个字符删除其后所有相同的字符,只留下第一次出现的那一个。例如,若字符串为”cocoon”,删除重复出现的字符后,其结果是字符串”con”。具体要求如下:(1)私有数据成员。char *s1:指向原字符串。char *s2:指向结果字符串。(2) 公有成员函数。DelSameStr(char *s):构造函数,动态分配s1...
2018-03-30 21:46:28
1771
1
原创 编程将一个二维数组元素变换为逆向存放
编程将一个二维数组元素变换为逆向存放,即按元素在内存中的物理排列位置,第一个元素变成倒数第一个元素,第二个元素变成倒数第二个元素,依此类推。例如,原始二维数组为,逆向存放后变为。试建立一个类REVARR,完成上述工作。具体要求如下:(1)私有数据成员int a[M][N]:初始化时存放原始二维数组,最终存放逆向存放后的二维数组。(2)公有成员函数REVARR(int x[M][...
2018-03-30 21:45:53
1619
原创 对一个5位数的任意整数,求出其降序数
对一个5位数的任意整数,求出其降序数。例如,整数是82319,则其降序数是98321。算法提示:将整数的各位数分解到一维整型数组a中,再将a数组中的元素按降序排序,最后输出a数组元素值。试建立一个类DescendNUM,用于完成该功能。具体要求如下:(1)私有数据成员int n:存放5位数的整数。int a[5]:存放其元素的降序排列值。(2)公有成员函数DescendNUM(...
2018-03-30 21:45:14
1427
原创 建立一个形状类Shape作为基类,派生出圆类Circle和矩形类Rectangle,求出面积并获取相关信息
建立一个形状类Shape作为基类,派生出圆类Circle和矩形类Rectangle,求出面积并获取相关信息。具体要求如下:(1)形状类Shape(a)保护数据成员double x,y:对于不同的形状,x和y表示不同的含义,如对于圆,x和y均表示圆的半径,而对于矩形,x表示矩形的长,y表示矩形的宽。访问权限定义为保护类型是为了能被继承下去,以便派生类能直接访问x和y。(b)公有成...
2018-03-30 21:44:23
6679
原创 建立一个矩阵类Matrix,存储一个4*4的矩阵并能在矩阵中查找某数
建立一个矩阵类Matrix,存储一个4*4的矩阵并能在矩阵中查找某数。要求如下:(1)私有数据成员int p[4][4]:存储一个4*4的矩阵的值。int n:矩阵的行数。int x:存储根据查找要求在矩阵中要查找到的某数。int row,col:存储该数所在的行、列值。(2)公有成员函数构造函数:初始化n的值为4,x、row、col为0。void input(in...
2018-03-30 21:43:23
1305
原创 建立一个类SUM,求二维数组外围各元素的和,并且输出数组各元素及所求之和
建立一个类SUM,求二维数组外围各元素的和,并且输出数组各元素及所求之和。具体要求如下:(1)私有数据成员int a[4][4]:二维数组,存放要处理的数据。int s:存放数组a外围各元素的和。(2)公有成员函数SUM(int b[4][4]):构造函数,用数组b初始化数组a。void process():求二维数组外围各元素的和s。void print():按行列方...
2018-03-30 21:41:48
2416
原创 建立一个类PrimeNUM,求指定数据范围内的所有素数(质数)
1.建立一个类PrimeNUM,求指定数据范围内的所有素数(质数)。具体要求如下:(1)私有数据成员int data[25]:依次存放在指定范围内求出的所有素数。int low,high:存放指定的数据范围的下限和上限。int num:存放low与high之间的素数个数。(2)公有成员函数PrimeNUM(int _low,int _high):构造函数,用参数_low和_...
2018-03-30 21:40:55
3192
原创 第一版聊天室
总结遇到的问题:在一开始构思架构的时候,肯定是采用CS架构,即客户端与服务器架构。如何通信是我遇到的第一个问题,开始想用IP地址来确定一个client,通过ip来通信,很快被我否定,因为一个ip可以登录多个client,相同ip会冲突,然后我想到通过客户端与服务器建立的套接字来锁定client,这个也是正确的想法。接下里是搭建服务器,用数据库来保存信息,很多信息,及时添加。服务器用一个while...
2018-03-08 23:13:27
155
原创 三月三日,正式开始写博客了
从2017年十月开始正式学习嵌入式开发,到现在也有5个月的时光了,从一个基础薄弱的萌新,到现在初步掌握一点C语言和linux,有了很大的进步。本来不想写博客,我自己所有的笔记与练习都放在了有道云笔记,我认为二者作用很相似,为什么会想写呢?聊天室这个项目,比较复杂,可以写很多功能,需要的知识面更加广,自己会的只是很小一部分,并且函数语法遇到很多问题,我打算写博客来记录自己做项目的整个历程,为后来者提...
2018-03-03 23:19:28
107
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人