![](https://img-blog.csdnimg.cn/20191010224401442.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++
yayakfa
这个作者很懒,什么都没留下…
展开
-
exception 异常理解
//异常:exception n.一般情况以外的人;例外,规则的例外;例外的事物;/*上面是exception的定义,其实这里应该叫做例外,而不是异常,实际上异常并不是本意*/#include "pch.h"#include <iostream>//假如这个函数是库的作者写的,当出现例外的时候,将问题throw,让库的使用者来判断应该如何处理这个exceptionvoid ...原创 2019-12-27 17:33:22 · 306 阅读 · 0 评论 -
继承关系中派生类重写基类(成员函数和虚函数)
我们知道,要想重写基类的虚函数,函数名称、参数、返回类型必须相同,才能够实现多态。class a {public: a() = default; virtual void display(int a)const { std::cout << " A virtual" << std::endl; }};class b :public a {publ...原创 2019-12-06 22:28:15 · 3156 阅读 · 3 评论 -
二义性问题之重载函数和转换构造函数
所谓二义性呢,就是出现了多个能够匹配的方式,导致编译器无法判断选择哪一个,出现的错误。#include "pch.h"#include <iostream>class first {public: first(int a): number(a){}private: int number;};class second {public: second(in...原创 2019-12-02 16:46:20 · 298 阅读 · 0 评论 -
类设计者之访问控制
这里我们只谈关于类的访问控制的内容。设计类的时候讲求数据封装,所以呢有三种访问限定符public protected private .下面这段我认为非常的好,摘选自c++ primer 4th第544页。 从类的设计者的角度,不考虑继承的话,我们可以认为一个类有两种不同的用户:普通用户和类的实现者。其中,普通用户编写的代码使用类的对象,这部分代码只能访问类的pub...原创 2019-11-21 09:56:21 · 123 阅读 · 0 评论 -
++ --运算符重载
++ --运算符有点特殊,因为有前置和后置两种,并且都是一元运算符。这就有点难分了。因此,为了区分前置和后置,后置的参数中带了一个int,用以区分前置和后置,代码如下。#ifndef PCH_H#define PCH_Htemplate<typename T>class like_ptr {public: like_ptr(T* a=nullptr): ptr(...原创 2019-11-10 20:39:13 · 96 阅读 · 0 评论 -
关于无法解析外部符号的错误
无法解析外部符号,表面意思还是比较清楚的。但当出了问题的时候呢,就不太好解决了。最常出现问题的原因:1.没有包含头文件2.没有包含库文件3.静态成员变量没有在类外定义这里,我主要想说的是类中静态成员变量的问题。为啥我们没有在类外定义静态成员变量就会报这种错误呢。分析一下编译器对静态成员变量的处理流程,相信大家就会明白了。1.大家应该都知道静态变量是在编译期就分配...原创 2019-11-10 19:37:18 · 561 阅读 · 0 评论 -
vector实现(带迭代器和allotor,非模板)
vector的实现,说说大体框架吧。1.vector中通过静态私有allotor的对象来动态实时分配空间。每次插入新内容是,都会检测空间是否足够,不够的话,重现分配现在大小的两倍,将内容拷贝过去。杀掉旧的空间。修改vector指针成员。这里有一点注意到是,类的静态成员要在类外进行定义,不然会报无法解析的外部符号错误。因此,在.cpp文件开头中有allocator<string>...原创 2019-11-10 19:04:28 · 190 阅读 · 0 评论 -
嵌套类
刚开始使用迭代器,对迭代器的定义方式有点疑惑。vector<string>::iterator a;::代表了iteraor这个类的做用户在vector<string>这个模板类的里面。于是百度了一番,最终认为这是嵌套类。在类中定义的类类型为嵌套类,而包含嵌套类的类称为外层类。虽然嵌套类是一个类型,理解的时候,就把它当作是外层类的一个内部成员即可。访问控...原创 2019-11-10 12:51:33 · 124 阅读 · 0 评论 -
通过指针访问私有成员
我们都知道为了实现数据封装,添加了private,protected,public三种访问限定符。在类的外部对应private和protected直接通过对象名和相应类类型的指针是不能访问私有成员的。但是,我们可以通过特殊方法来读取私有成员。#include "pch.h"#include <iostream>#include<string>using ...原创 2019-11-08 20:11:22 · 1523 阅读 · 0 评论 -
free释放空间的解疑
malloc是c中分配动态空间的方式之一,free是释放分配的动态空间的方法。但是呢,我们可以通过malloc来分配一段非常大的空间,free的时候仅仅是传递了应该指针作为参数,没有指出要收回的范围大小。例子:int*a =(int*)malloc(sizeof(int)*10);free(a);这里呢,我们一共分配了40个字节的空间。但是,free的时候仅仅传递了一个int*...原创 2019-11-08 17:32:24 · 432 阅读 · 0 评论 -
标准库sort函数第三参数
#include<algorithm>头文件中包含着sort排序函数,这个函数接受第三参数。可以是函数名,也可以是函数指针,也可以是lamba表达式等等等。这里主要提醒一点,不能传递成员函数名。但可以是静态成员函数和全局函数。成员函数中包含了this指针,而sort函数会像这个第三参数传递两个参数,所以,成员函数不行。下面是一个模仿shared_ptr智能指针的程序...原创 2019-11-07 21:26:01 · 299 阅读 · 0 评论 -
极简版shared_ptr实现
程序如下:头文件:#ifndef PCH_H#define PCH_H#include<string>#include<iostream>using namespace std;class like_shared_ptr {public: //交换函数 friend void swap(like_shared_ptr&, like_shar...原创 2019-11-02 20:44:26 · 233 阅读 · 0 评论 -
关于.h文件和.cpp文件所包含内容的问题
基于vs 2017c++编译器,不包含其他。之前一直认为头文件反正只包含一次,将类中的成员函数在类的下面定义没有问题。所以以前经常将函数这样定义。但是呢,之前偶尔会出现重定义的问题,碰到过几次,也没有太在意,今天呢,实现一个内容时,也是如此,但是找了好久都没有找到问题,真的是很烦啊。所以啊,强烈推荐大家按照规范来编写程序,为了自己,为了别人。将简短的内容在类内定义,作为内联函数,但是一旦长...原创 2019-11-02 20:20:47 · 178 阅读 · 0 评论 -
static成员变量简单使用
static成员变量最最最需要注意到一点,就是他的赋初值是在类的定义外。为什么?static变量属于整个类,而不是某个对象,所有对象共用。如果在类内,每次创建对象,都会将这个量赋值的。那么,我们在什么地方进行赋值呢?在mian函数中?还是在哪里呢?如果按照正确的思维,确实应该在mian函数中赋初始值。但是呢,在大的项目中,大家都是分工的,我编写好的类,别人可以直接拿来用。如果,你使用别人的...原创 2019-11-02 12:04:27 · 206 阅读 · 0 评论 -
类类型隐式转换
c++中不仅仅基本类型有类型转换。类类型也有。像static_cast,const_cast等等都可以对基本类型和类类型进行强制转化。那么类类型的隐式类型转换呢?隐式类型转换要用到带参构造函数和拷贝赋值函数。程序如下:#include "pch.h"#include <iostream>using namespace std;int main(){ xiao...原创 2019-10-21 21:12:53 · 482 阅读 · 0 评论 -
查找txt文件中出现的单词的数量和行数
从一个txt文本文档中查找某个单词出现的次数和相应的行数。方法:1将文本文档内容按每行读入到vector<string>容器中。2.将vector<string>中每个string拆分成相应单词。3.将单词和出现的行数作为一组,放入map<string,set<string::size_type>容器中。4.将用户输入的单词从map中进...原创 2019-10-20 20:04:03 · 1518 阅读 · 0 评论 -
multimap记录家庭成员程序
题目要求:定义一个multimap,关键字是家庭的姓,值是一个vector,报存家中孩子的名字,允许重名。编写代码,实现添加新的家庭以及向已有家庭中添加新的孩子。代码如下:#include "pch.h"#include <iostream>#include<map>#include<string>#include<vector>...原创 2019-10-12 20:42:03 · 155 阅读 · 0 评论 -
经典单词计数程序
题目要求:统计每个单词在输入中出现的次数解决办法:用标准库中的map来存储单词以及出现的次数。这里会出现两种方法:方法一、下标法#include "pch.h"#include <iostream>#include<map>#include<set>#include<string>using namespace s...原创 2019-10-12 19:54:38 · 372 阅读 · 0 评论 -
类中成员函数的函数指针定义以及使用
在algorithm算法中经常会碰到传递函数指针的情况,在这里面他们把这种类型叫做谓词,当然lambda表达式就是谓词的一种。这次内容要说的当类的成员函数做为谓词时,是什么样子的,如何使用呢?类中一共会有三种函数:1.非静态非虚函数非静态非虚函数的函数指针,因为成员函数里面会传递this指针,所以就算是函数指针,也必须有对象来调用他们。非静态非虚函数的函数指针格式:返回类型(类名::*指...原创 2019-10-11 20:55:53 · 2382 阅读 · 0 评论 -
从编译器的角度深入理解多态和虚函数
在c++中存在继承的关系,但是继承过程的内存模型不是很了解,现在来深入思考。从一个类说起,定义了一个类仅仅是是定义了一个模型,当然这个模型也是占内存的,但仅仅只有一份。当我们定义了一个这个类的对象时,new会在堆中给他分配一块内存,正常是在栈中分配一块内存。这块内存的大小是多少呢。如果我们定义的类中没有成员变量。这时,这个类仅仅占一个字节,用来标识这个对象的存在。如果有成员变量的话,就不需要这...原创 2019-09-03 16:42:10 · 170 阅读 · 0 评论 -
C++ Big Three 拷贝构造函数,拷贝复制函数,析构函数,移动构造函数,移动赋值函数
我们有时在一个类的成员变量中定义一个指针,让其指向一段new出来的空间。比如下面这一段例子:#ifndef _bigthree#define _gigthree#include<iostream>using namespace std;class havepointer{private: char* a;public: havepointer() { a ...原创 2019-09-04 12:18:09 · 282 阅读 · 0 评论 -
c++中const都使用
在c++中,const可以用在很多地方。我认为最重要的是两个方向1.变量上2.函数上下面分别来说明。用在变量上时#include "pch.h"#include<string>#include <iostream>using namespace std;int main(){ const int a=1; //最简单的情况 可以叫...原创 2019-09-04 17:42:35 · 103 阅读 · 0 评论 -
用临时对象 赋值、初始化对象的过程
代码如下:#ifndef _Hello#define _Hello#include<iostream>using namespace std;class LUO {private: int x; int y;public: LUO() { cout << "默认构造函数" << endl; } LUO(int a, int b) ...原创 2019-09-07 16:44:57 · 531 阅读 · 0 评论 -
关于返回类型为引用
在c++中,函数经常返回类型为引用。这里呢,我主要说的一点是,当返回类型为引用时,我们可以用引用来接受,也可以用普通变量来接受。#include "pch.h"#include <iostream>using namespace std;int a = 19;int& lyy() { return a;}int main() { int b = lyy...原创 2019-10-05 15:11:05 · 5560 阅读 · 0 评论 -
C++定时关机小程序
很久之前就了解了c语言有system("shutdown -s -t xx");定时关机功能。但是windows系统上并没有这个功能,于是自己写了一个关于定时关机的小程序。用vs2017控制台程序写的,以后有时间重新用窗口程序重新来写,可视化程度更高些。如果大家有更好的实现方法,可以一起交流交流。代码如下://@author GODLUO#include"pch.h"#includ...原创 2019-03-21 23:07:40 · 883 阅读 · 0 评论 -
关于容器循环中的erase
#include "pch.h"#include <iostream>#include<vector>#include<string>#include<list>using namespace std;int main(){ int ia[] = { 0,1,1,2,3,5,8,13,21,55,89}; vector<in...原创 2019-10-06 13:52:09 · 183 阅读 · 0 评论 -
c写的贪吃蛇
vs 2017下,编写的程序,一个pch.h头文件,这个是项目开始就自带的。一个pch.cpp和snake.cpp。snake.cpp代码如下:// snake.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。#include"pch.h"#include<time.h>int main(){ startgame(); return 0;...原创 2019-10-06 14:15:19 · 171 阅读 · 0 评论 -
时间片轮转算法模拟
这是我们操作系统课程设计的时候写的一个模拟时间片轮转的算法。比较简单。哈哈哈哈代码如下:/*时间片轮转算法 author GODLUO 1.获取用户输入 2.创建结构体并且插入链表 3.时间片循环消耗进程中时间 3.1时间够直接减去 3.2时间不够一个时间片,按进程剩余时间 4.结束,输出一共所用时间以及各进程所用 时间和各进程结束顺序 */#include&...原创 2019-10-06 14:39:04 · 1142 阅读 · 0 评论 -
string中遍历匹配所有子串以及替换
当我们要在stirng中匹配所有子串时,用find成员函数非常的方便。不用像c一样,用那个超级难的KMP算法和BF算法。哈哈,虽然难,但是想起以前自己学数据结构的那股感觉,心里还是会感到欣慰。好,说正题,代码如下:#include "pch.h"#include <iostream>#include<vector>#include<string>...原创 2019-10-07 10:15:16 · 960 阅读 · 0 评论 -
vector<string>容器排序以及删除其中相同的string元素
题目要求:假定已有一个vector,保存了多个故事的文本。我们希望简化这个vector,是的每个单词只出现一次,而不管单词在任意给定文档中到底出现了多少次。可能这个题目要求读起来有点不好理解,见代码会很清晰:#include "pch.h"#include <iostream>#include<vector>#include<string>...原创 2019-10-08 15:26:59 · 549 阅读 · 0 评论 -
c++中关于参数是字符数组时的情况
在论坛里面看到一个c++课本上完全写下来的程序。但是说编译时有问题。正好我也有这本课本,回去尝试了,确实,报错了。找了一会儿,最后知道了原因。其实学习c的时候知道这部分知识,在这里就是没想起来。不过也无关紧要了,已经过时的东西,以后估计也不会碰到了吧。代码如下:(注释)#include "pch.h"#include <iostream>#include<strin...原创 2019-10-09 19:40:35 · 392 阅读 · 0 评论 -
c++ primer p349 biggies的实现
要求:随机输入多个字符串,最后输ctrl+z,回车。输入想要显示的字符串的最小长度。将字符串按长度和大小排序。然后输出满足条件的字符串。代码如下:#include "pch.h"#include <iostream>#include<vector>#include<string>#include<algorithm>usi...原创 2019-10-09 20:18:36 · 185 阅读 · 0 评论 -
map、set初次尝试
c++中一共有8中关联容器,分别是:map //红黑树实现,每个节点保存有key和value,不允许有重复的关键字multimap //同map类似,不同点:允许有重复的关键字set ...原创 2019-10-11 15:54:00 · 97 阅读 · 0 评论 -
C++类型转换
这部分内容是关于自动类型转换,赋值类型转换,强制类型转换的。自动类型转换:C++中允许某些不同类型的变量之间运算,这类转换是编译器进行的,一般将低精度转换为高精度。转换规则如下: char,short—>int—>unsigned int—>long—>unsigned long—>double<—float1.当 char和short...原创 2019-03-25 23:20:32 · 524 阅读 · 0 评论