![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++基础
文章平均质量分 69
xcm2yw
这个作者很懒,什么都没留下…
展开
-
printf格式化输出的一个小问题
C语言中printf可以格式化输出各种类型的参数,但是这里是要记录自己忽略的一个问题。在项目我想输出打印字符串,但是打印的字符串为空,但是我能确保字符串并不是空的,因为我将字符串逐个能打印出来。开始以为是没有进行拷贝。于是,拷贝到另一个变量之后,打印出来的字符串还是空的。紧接着,我从字符串的第二位开始输出,发现能够打印到控制台中。仔细看我的字符串的第一个字符的十六进制为0x00,所以猜测在打印字符...原创 2020-01-05 23:30:51 · 316 阅读 · 0 评论 -
C++基础——友元函数
在C++中为了有更好的封装性,所以我们一般将数据声明为私有成员(private)。当我们需要操作数据成员的时候就需要利用类内的函数来使用私有的数据成员。而我们在实现函数定义时是在类外进行函数定义的。而只有类内的函数才可以访问类中的数据成员,函数通常声明为共有成员。但是还有另一种方法:将函数声明为友元函数,那么该函数也可以访问类内的私有成员。 class product{publi...原创 2018-03-17 16:11:40 · 292 阅读 · 0 评论 -
二叉树的遍历
1、前序遍历上一篇文章讲到二叉树的存储结构,这里使用的就是该存储结构。前序遍历的规则是:若二叉树为空,则空操作返回,否则就先访问根节点,然后前序遍历左子树,再前序遍历右子树。那么前序遍历的结果是:ABDGHCEIF。前序遍历的代码分析:下面的代码使用递归算法进行前序遍历的。先访问根结点,若根结点不为空,则打印结点的数据。然后递归访问左子树,直到所访问的左子树是最后一个。最后以此类推访问右子树。vo...原创 2018-02-25 15:48:29 · 152 阅读 · 0 评论 -
《CEffective C++》之条款01
经过40多年的发展C++已经是个多重范型编程语言,一个同时支持过程式、面向对象形式、函数形式、泛型形式、元编程形式的语言。C++在不断的发展,所以在学习的过程中需要用新的思想和角度来看待C++。而“最简单的方法是将C++视为一个由相关语言组成的联邦而非单一的语言”,当时第一眼看到这句话的时候无法理解为什么要把C++给拆开。当然这种“语言联邦”的形式表面上看像是分割开的,但是实际上其中是有联...原创 2018-03-04 23:52:29 · 142 阅读 · 0 评论 -
C++基础——虚继承及其内存分布
1、虚继承在C++继承中会遇到一种特殊的情况——“钻石继承”。“钻石继承”指的是当一个基类A被两个派生类B和C同时继承,此时另一个派生类D又同时继承B和C,如果此时用图表示出来就像一个菱形一样,如下图。 派生类D通过继承之后拥有基类A和派生类B,C的成员,所以一旦派生类D想要调用基类A的成员(无论是数据成员还是成员函数)时,此时派生类是通过派生类B来访问基类A的成员呢?还是通过派生类C来访...原创 2018-03-23 16:12:57 · 1542 阅读 · 0 评论 -
C++基础——继承
1、公有、私有和受保护继承 如果一个类的成员被定义成该类的私有成员,那么只有基类的成员和友元可以访问类中的私有成员。同时派生类也无法访问基类的私有成员,派生类的实例对象也无法访问这些私有成员。如果派生类为公有继承,基类成员保持自己的访问级别:基类的public成员为派生类的public成员,基类的protected成员为派生类的protected成员。如果是受保护成员,基类的public和p...原创 2018-03-19 08:53:03 · 137 阅读 · 0 评论 -
《Effective C++》 条款33:避免遮掩继承而来的名称
派生类继承基类后会拥有基类的成员变量和成员函数,如果派生类中有和基类相同名称的成员函数和成员变量,那么派生类中相同名称的成员函数会把继承而来的成员函数“遮盖”掉。下面给出实例来进行分析。class Base_A{public: Base_A():element(0) {} virtual ~Base_A() {} void print(int a) { cout <<...原创 2018-03-25 10:37:03 · 215 阅读 · 0 评论 -
《Effective C++》条款07:为多态基类声明virtual析构函数
class Base_A{public: Base_A():element(0) {} ~Base_A() { cout << "调用A的析构函数" << endl; } void print(int a) { cout << a << endl; } void print(float a) { cout << a &..原创 2018-03-26 11:41:51 · 211 阅读 · 0 评论 -
C++基础 虚函数
在基类中可能会存在virtual函数,那么当派生类继承了基类的话,一般都是希望派生类重新定义继承来的virtual函数。如果派生类没有定义某个虚函数,则使用基类定义的版本。C++中的函数调用默认不使用动态绑定。要触发动态绑定需要满足两个条件:(1)只有指定为虚函数的成员函数才能进行动态绑定,成员函数默认为非虚函数时,不进行动态绑定。(2)必须通过基类类型的引用或指针进行函数调用。class fru...原创 2018-03-27 19:31:22 · 143 阅读 · 0 评论 -
二叉树
1、二叉树的特点每个结点最多两棵子树,所以二叉树中不存在大于2的结点。注意不是只有两棵子树,而是最多有。左子树和右子树是有顺序的,次序不能任意颠倒。即使树中某种结点只有一棵子树,也要区分它是左子树和右子树,如下图。 2、二叉树具有的五种基本形态空二叉树。只有一个根结点。根结点只有左子树。根结点只有右子树。根结点既有左子树又有右...原创 2018-02-23 22:16:19 · 185 阅读 · 0 评论 -
C++类中的static成员函数和static数据成员
1、static数据成员的使用1.1 static数据成员的定义static数据成员可以声明为任意类型,可以是常量、引用、数组、类类型。static数据成员在类内声明,但是必须在类定义体的外部定义,也就是必须在类外进行定义。在使用类内的static成员时,和其他的成员变量的使用方法相同。class ChineseClass{public: void Note(); ChineseClass...原创 2018-03-08 17:55:44 · 2112 阅读 · 0 评论 -
C++基础学习
对C++中后自增操作符和前自增操作符的辨析。原创 2017-10-10 10:11:03 · 435 阅读 · 0 评论 -
Reverse Integer算法题
long reverse(long x) { long reservation=0; while(x!=0) { reservation=reservation*10+x%10; x=x/10; } if(reservation<2147483648&&reservati原创 2017-10-30 22:27:53 · 131 阅读 · 0 评论 -
intToRoman算法题
做这道题之前得自己先写写阿拉伯数字与罗马数字之间的转换,找到他们之间的规律。刚开始的时候,我用了一个很笨的办法来完成这道算法题。我想把一个罗马数字和阿拉伯数字对应的表给写出来。先把1~10的写出来,然后把10,20,30,40,50,60,70,80,90的罗马数字写出来,再把100,200,300,400,500,600,700,800,900对应的罗马数字写出来。把所给的数字分解成一位一位的数字原创 2017-11-02 23:48:54 · 145 阅读 · 0 评论 -
二维动态数组的创建
昨天在写一个小的编程作业的时候需要用到动态的二维数组。我需要用到这个二维的数组来实现矩阵的加、减、乘,这个作业很简单,但是创建动态二维数组的这个知识点给忘了(尴尬)。所以就查了下资料,把这个简单的知识点记录下来。假如要创建一个4*5的动态二维数组。int **Metrix;Metrix=new int *[4];//Metrix实际上是指针的指针,所以这一行代码原创 2017-11-22 20:48:43 · 1133 阅读 · 0 评论 -
指针参数传递中的玄机
之前在写数据结构(链栈)的算法实现的时候出现了一个小问题,我想要实现元素入栈的功能,函数的原型及定义如下:LinkStack* PushElem(LinkStack *linkstack,int element){ if (IsEmptyStack(linkstack)) { cout<<"该栈为空,无法插入元素"<<endl; return linkstack; } el原创 2018-02-03 10:39:57 · 121 阅读 · 0 评论 -
顺序栈
数据结构——栈,是一种先入后出的数据结构。就像一摞盘子一样,一个一个地往上摆。取盘子的时候是在最上面的盘子先被取出来,所以先放进去的就要后取出来。栈的特性具有下面两种特性:(1)组成的数据元素是相同类型的,并且数据间线性排列。(2)只能对栈顶的数据元素进行操作。栈结构,可以分为两种——分别是顺序栈和链栈。顺序栈存放数据使用的是数组的形式。这里要介绍的顺序栈。顺序栈采用的是地址连续的原创 2018-02-03 14:25:28 · 188 阅读 · 0 评论 -
链栈
链栈和顺序栈不同,链栈是采用一个个存储结点来存储数据的。它不像顺序栈在地址上是连续的线性存储结构。所有的存储单元可以占用连续或不连续的存储区域。每个存储单元在存储栈中的元素a1的同时,也存储其逻辑后继a2的存储地址。typedef struct node{ int data;//存放数据 struct node *next;//下一个结点的地址}LinkNode,*LinkStackPtr原创 2018-02-03 21:25:43 · 209 阅读 · 0 评论 -
数据结构——链队列
链队列是指采用链接存储结构实现的队列。队列中的每个元素单独占有相应大小的存储空间。每个存储单元包括所需要存储的数据,以及下个存储单元的地址指针。可以用下面图一的示意图来表示一个存储单元。datanext图一 存储单元结构示意图链队列是在对头删除数据元素、队尾插入数据元素的。所以可以分别为队头和队尾设置一个头指针和一个尾指针,头指针和尾指向该链队列的队头和队尾。我们可以用结构体来封装。链队列的基...原创 2018-01-19 21:10:11 · 1418 阅读 · 0 评论 -
链队列的应用——打印杨辉三角
链队列的一个小应用可以用来打印杨辉三角。虽然打印杨辉三角的方法有很多,也不需要使用到数据结构,但是这里可以用数据结构来实现从而达到复习的目的。下面我主要说一下这个小算法。还是应用结构体来封装数据,和下一个节点的指针。每个存储节点:typedef struct node{ int data; struct node *next;}Node;包含头指针和尾指针的链队列:原创 2018-01-20 12:25:04 · 5534 阅读 · 0 评论 -
HappyNumber leetcode算法题
HappyNumber leetcode算法题HappyNumber一个快乐的数字是由以下过程定义的数字:从任何正整数开始,将数字替换为数字的平方和,并重复该过程,直到数字等于1(将保留在哪里),或者循环一个不包括在内的循环的循环中,这个过程以1结尾的数字是快乐的数字。示例: 19是一个快乐的数字 1^2 + 9^2 = 82 8^2 + 2^2 = 68 6^2 + 8^2 = 100原创 2017-10-19 12:33:23 · 338 阅读 · 0 评论