C++
文章平均质量分 52
七夜落幕丶
这个作者很懒,什么都没留下…
展开
-
C++ 递归实现简单语言解释器
程序可以解释赋值语句,完成的功能如下:判断它是够包含合法的赋值语句求所有表达式的值 输入输出模版如下: 递归包含直接递归和间接递归。例如:一个项可以是一个因子,或者一个因子后面跟着称号“*”(或“/”)以及另一个因子。而因子可能是一个标识符,一个数,圆括号中的表达式,或者带有负号的因子。 调用链为term()->factor()->expression()->term(); 代码如下原创 2017-11-17 11:13:11 · 1347 阅读 · 0 评论 -
C++ 智能指针
1 autp_ptr(C++11之前)功能简单,源代码简单,所以直接分析源代码(有部分格式改动)可以知道这是一个模版类(声明方法为auto_ptr<T>):首先是类需要用到的一些东西template<class _Ty> //前向声明class auto_ptr;template<class _Ty>struct auto_ptr_ref...转载 2018-05-06 18:18:04 · 137 阅读 · 0 评论 -
C++ 左值和右值
左值,右值在C++11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)。举个例子,int a = b+c, a就是左值,其有变量名为a,通过&a可以获取该变量的地址;表达式b+c、函数int func()的返回值是右值,在其被赋值给某一变量前,我们不能通过变...转载 2018-05-05 19:12:44 · 1507 阅读 · 0 评论 -
为什么const对象只能调用const成员函数,而不能调用非const成员函数?
在c++中,我们可以用const来定义一个const对象,const对象是不可以调用类中的非const成员函数,这是为什么呢?下面是我总结的一些原理。假设有一个类,名字为test代码如下:class test{ int i;public: void print(); test(int i);};我们知道c++在类的成员函数中还会隐式传入一个指向当前对象的this指针,所...转载 2018-05-02 15:03:26 · 945 阅读 · 0 评论 -
C++ 引用声明为const
const引用只读不可修改,与绑定对象是否为const无关。 非const引用可读可改,只可与非const对象对象绑定。const intival = 1024;//int &ref2 = ival; //error:nonconst reference to a const objectconst int&refval = ival; //ok:both refer...转载 2018-04-09 22:56:55 · 929 阅读 · 0 评论 -
C++中sizeof的一个特性
#include <iostream>using namespace std;int main(){ int a = 1; cout << sizeof(a = 3) << endl; cout << a << endl; return 0;}输出为4,1,而不是4,3 由输出可以知道,...原创 2018-03-06 12:55:34 · 129 阅读 · 0 评论 -
C++ new操作符
#include <iostream>#include <new>using namespace std;int main(){ //operator new申请一块内存空间,用来存储string对象 void *rawMemory = operator new(sizeof(string)); //用string指针指向此块内存空间,使这...原创 2018-03-06 12:19:09 · 216 阅读 · 0 评论 -
C++ RTTI(运行阶段类型识别)
问题:假设有一个类层次结构,一个基类派生了很多类,则可以让基类的指针指向其中任何一个类的对象,那通过指针指向对象的时候,如何判断对象的类型呢? C++拥有RTTI(runtime type identification)这个特性 RTTI:运行阶段可以确定对象的类型。C++有3个支持RTTI的元素dynamic_cast操作符将使用一个指向基类的指针来生成一个指向派生类的指针,否则该操作...原创 2018-03-18 15:00:58 · 313 阅读 · 0 评论 -
C++ const
1用const 修饰函数的参数 如果参数作输出用,不论它是什么数据类型,也不论它采用“指针传递”还是“引用传递”,都不能加const修饰,否则该参数将失去输出功能。const 只能修饰输入参数: 如果输入参数采用“指针传递”,那么加const修饰可以防止意外地改动该指针,起到保护作用。 例如StringCopy 函数:void StringCopy(char*strDestinati...转载 2018-03-16 10:54:38 · 120 阅读 · 0 评论 -
C++ 四种类型转换
C++中存在四种类型转换操作符:static_cast、dynamic_cast、const_cast、reinterpret_cast。 下面对这四种类型转换操作符进行简要介绍:static_caststatic_cast提供编译时期的静态类型检测,可以完成以下几类类型转换: 1)完成基础数据类型 2)同一个继承体系中类型的转换 3)任意类型与空指针类型void*之间...原创 2018-03-09 19:12:36 · 361 阅读 · 0 评论 -
C++ 控制对象生成数量的一个方法
如果一个类希望自己的对象数量可以控制在一定范围的话,可以采用对象计数的方式。在类中添加对象当前的数量和对象总共的数量(都设置为静态的全局类型) 但是类可能会通过被继承或者其他方式产生新的对象,需要杜绝这种方式,所以采用伪构造函数的方式。 伪构造函数就是将构造函数定义为私有类型,然后通过其他的供油成员函数调用构造函数来实现对象的产生,从而杜绝了构造函数和复制构造函数这两种产生新的对象的途径(带有...转载 2018-03-09 13:30:38 · 621 阅读 · 0 评论 -
C++ 运算符重载和类型转换函数
C++中对于用户自定义类对象的运算,要进行重载操作。如class overload{public: ...private: int num;};overload o1, o2;int num;//要实现的加法操作如下:/*1*/overload o3 = o1 + o2;/*2*/overload o4 = o1 + (任意int型);/*3*/overl...原创 2018-03-08 12:55:02 · 1626 阅读 · 0 评论 -
C++ mutable
C++的类中,如果用mutable关键字修饰的成员变量,在任何成员函数中都可以被修改,甚至是const修饰的成员函数。#include <iostream>using namespace std;class Mute{public: Mute(int a, int b):NotmuteNum(a), muteNum(b){ } void muteTes...原创 2018-03-07 15:22:00 · 431 阅读 · 0 评论 -
C++ Brute Force算法
BF算法,即暴风(Brute Force)算法,是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符;若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果。BF算法是一种蛮力算法。 代码如下:#include <iostream>#include <string>usin原创 2017-11-15 19:50:11 · 439 阅读 · 0 评论 -
C++ 利用栈实现走迷宫
使用两个栈,一个用于初始化迷宫,一个用于回溯。#include <iostream>#include <string>#include <cstring>#include <stack>using namespace std;template<class T>class Stack:public stack<T>{public: T pop(){ T tmp =原创 2017-11-14 11:07:36 · 1172 阅读 · 0 评论 -
C++ 字符串分割的一些记录
有一个string如下:string str = "1311|1337|1357|1294|1325|1337|1333|1340|1325|1347|1353|1350|1313|1341|1346|1336|";将这个string以符号 | 分割开,可以使用strtok函数。 str是要分割的字符串,s是分割的依据。strtok(char *str, char *s);第一次分割时str输入要原创 2017-11-13 14:44:11 · 206 阅读 · 0 评论 -
C++虚函数和虚函数表原理
虚函数的地址存放于虚函数表之中。运行期多态就是通过虚函数和虚函数表实现的。类的对象内部会有指向类内部的虚表地址的指针。通过这个指针调用虚函数。虚函数的调用会被编译器转换为对虚函数表的访问:ptr-&gt;f(); //ptr代表this指针,f是虚函数*(ptr-&gt;vptr[1])(ptr);上述代码中,ptr代表一个this指针,ptr指向的vptr是类内部的虚表...原创 2018-07-26 19:49:54 · 44459 阅读 · 13 评论