C++
molly_d
我希望你可以像我一样一想到未来就繁星一片
展开
-
vs 写c++一个类的头文件放在改工程下的一个子目录里,include出错
工程名test类名http,子目录:http在主源文件中include这个http 的头文件时,include"./http/http.h"编译出错一定要改成绝对路径。#include "/home/molly1/test/http/http.h""原创 2021-03-24 21:41:38 · 331 阅读 · 0 评论 -
Mac sublme text 配置c++ 版本opencv4
{"cmd": ["g++", "-Wall", "-Wextra", "${file}", "-o", "${file_path}/${file_base_name}","-I/usr/local/Cellar/opencv/4.3.0/include/opencv4/opencv2/","-I/usr/local/Cellar/opencv/4.3.0/include/opencv4/","/usr/local/Cellar/opencv/4.3.0/lib/libopencv_calib3d.原创 2021-03-20 12:48:57 · 155 阅读 · 0 评论 -
C++typedef的详细用法
转自知乎的一段解释:作者:知乎用户链接:https://www.zhihu.com/question/29798061/answer/144423125来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。不太想谈#define, 在题主的例子的这种用法里, 它就是个文本替换工具, 预处理器完成的, 无脑替换, 跟word里的replace一模一样, 不关编译器的事. 我想谈一下typedef.搞懂了c++创始人写的<the design and evol.转载 2020-06-25 16:11:30 · 199 阅读 · 0 评论 -
抽象基类ABC
abstract base class(ABC)就是基类是抽象类,那么什么样的类才是抽象类,是要有纯虚函数的类纯虚函数的声明:virtual void Area() =0;,该函数Area就是一个纯虚函数一。为什么要用纯虚函数比如说我们想要定义圆和椭圆,他们包括圆,椭圆的中心坐标,椭圆的长短轴,两者的面积,移动方法等,就是说他俩有一些共性,但是像面积他俩都要求,但是方法又不一样,我们可以说圆是椭圆的特殊,但是计算方式却是不一样,所以我们可以抽象出来一个抽象基类,将他俩相同的放进去,包括求面积原创 2020-06-24 21:08:20 · 302 阅读 · 0 评论 -
派生类-构造函数
在hpp头文件中,声明构造函数中,必须为新增的数据成员和基类的数据成员提供数据,即每一个形参代表一个成员派生类声明构造函数入下,其中r是给新增的数据,后面是基类的成员。在cpp文件定义的时候,必须创建基类的对象,即如果不是默认的对象,则必须显示的创建基类的对象,将数据传递给基类的对象如下图:Tabletennisplaye是基类,必须要给他穿入数据,然后再进入构造函数题,给新的成员rating提供数据(其实没有hpp,我们是直接可以声明并且定义的,所以一定要给基类创建对象).原创 2020-06-24 18:39:34 · 860 阅读 · 0 评论 -
虚函数
一。首先说一下,虚函数咋用的虚函数是在基类中,对成员函数进行声明的,当然构造函数和友元函数都不可以声明为虚函数声明要加virtual,但是定义的时候不用加virtual,在派生类的声明中可加可不加,最好加上吧。virtual void name()二。为什么使用虚函数对呀,为什么呢如果我们不使用虚函数比如一个基类class father,其派生类class son那么一个基类的指针或者引用father *f /father &f,当他指向的是一个派生..原创 2020-06-24 17:03:01 · 223 阅读 · 0 评论 -
存储持续性、作用域、链接性
一。存储持续性:数据保留在内存的时间分为4个不同的存储链接性方案:(1)自动存储持续性:在函数内定义的变量以及其参数,在程序执行的时候创建,在函数结束之后内存被释放(2)静态存储持续性:在函数外定义的变量或者使用static定义的变量,他们在整个运行的过程中都存在,不会因为调用该函数,而进行初始化,他们的值是一直被“累加的”(3)线程存储持续性:多线程并行时设置的(4)动态存储持续性:由new来进行动态的分配内存,分配的内存一直在,直到delete释放,有时被称为自由存储或堆二。作用原创 2020-06-24 12:39:42 · 171 阅读 · 0 评论 -
作用域-类的常量
如何在类中定义一个常量,不能直接在类中使用 const a =10;因为这时的对象还没有创建,不能分配空间有两种方法原创 2020-06-24 07:03:30 · 117 阅读 · 0 评论 -
this指针
this指针用来在两个对象进行比较的时候,返回调用该方法的对象eg.类dog有一个数据成员为age类有一个成员函数是这样的dog & compare(dog & d){ if(d.age>age) return d; else return ?}就是参数是该类的对象,返回值也是该类的对象else我们该返回什么,我们要返回调用该函数的对象,但是他这里没有名字egdog d1,d2;d1....原创 2020-06-23 18:00:53 · 224 阅读 · 0 评论 -
类--内联函数--构造函数--成员函数和const
在头文件中叫做类的声明一。内联函数在类声明中一般要声明成员函数,如果声明的时候直接定义了该函数,则该函数被自动为内联函数如果定义和声明分开了,但也是在头文件中定义了该函数,并且用inline,也是内联函数二。构造函数一般情况下,我们都是使用对象来调用方法但是构造函数不能用对象来调用,因为对象是由构造函数来创建的,在构造函数创建出对象来之前,对象是不存在,都不存在,还怎么调用,是人家构造函数创建的对象。三。成员函数和const如果说对象我们写出const类型的,即要求该对象不能原创 2020-06-23 17:42:48 · 383 阅读 · 1 评论 -
函数模板
为了实现泛化template<typename T>不能变的是template<typename> ,或者将typename换成classT自己随便起名字原创 2020-06-22 18:55:16 · 90 阅读 · 0 评论 -
函数重载
函数多态==函数重载只是参数的个数,类型和排列顺序的差异,和函数的返回类型无关原创 2020-06-22 16:49:18 · 106 阅读 · 0 评论 -
引用变量
引用就是一个变量的别名,声明:int a = 0;int &b = a;b就是a的引用,a和b指向的内存时同一个地址,b可以修改变量的值一。主要的用途是将引用变量作为函数的参数传递,为什么呢?(1)对于函数要改变变量的值的情况下,函数进行值传递是不能被改变的,只是创建了一个临时变量,拷贝了原函数的变量值,并不能改变原函数变量的值,可以使用指针进行传递,还有一种方法就是传递引用,也可以用来修改原函数变量的值egvoid change1(int &a,int &am原创 2020-06-22 16:32:11 · 2544 阅读 · 0 评论 -
内联函数
即短小代码的函数直接替换,而不用在跳转到调用函数的位置,然后再跳转过来,浪费时间,在每一次调用函数时,直接把代码也调用过去,内联就是和其他的程序代码内部联系起来嘛,但是一个代价就是需要更多的内存,以空间换时间。和C语言中的宏类似eg inline int sum(int a, int b){return a+b;}...原创 2020-06-22 14:12:42 · 191 阅读 · 0 评论 -
函数指针
函数指针指向的是函数的地址一。首先声明一个指针,该指针的类型返回值参数和原函数一样,即只要将原函数的名字,换成你想要的指针的变量名即可,eg:原函数:const double *f(const double *,int n);声明指向该函数的指针:const double *(*p)(const double *,int);也就是用(*p)替换函数名,表明是指向该函数类型地址的指针二。初始化const double *(*p)(const double *,int) =原创 2020-06-22 12:42:26 · 165 阅读 · 0 评论 -
指针与const
很微妙一个变量声明为const就表明是常量,不能被修改了(注:static静态变量不是常量,是可以被修改的,他只是在内存位置不变,在函数调用之前和之后不变,不会被释放)两种指针和const之间的用法一。int a = 10const int * p = &a;p指向的是一个const int (这里就是 10),也就是说*p的值是const int 类型的,也就是常量,*p是常量,那么我们就不能用p来修改这个值,即*p=20,是错误的,但是a并不是常量,可以通过a 来修改 .原创 2020-06-22 11:28:34 · 256 阅读 · 1 评论 -
指针
一。首先对指针的第一印象就是他指向的是一个地址,如下面所示:int a = 3;int *p = &a;这样表示的话,p就是表示a这个变量所在的地址,也就是换了一个名称来表明这个地址,其实意义不大指针的真正的用武之地是在于,在运行阶段分配未命名的内存以存储值,这种情况下,就只能通过指针来访问内存,在c语言中,库函数malloc()来分配内存,在c++ 仍可以使用该方法,但是更好的方法是使用new运算符来分配内存。eg. int *p = new int;new是在程序...原创 2020-06-22 11:29:15 · 148 阅读 · 0 评论 -
数组
静态联编:只能在定义的时候进行初始化,此后就不能初始化了,也不能讲另一个数组赋值给另一个数组,可以通过数组下标进行赋值动态联编:上面是静态的创建数组,在编译的时候给数组分配内存,动态联编是在运行的时候才给数组分配内存,使用new来创建,用指针指向被创建数组的内存地址eg: int *p = new int[4]; 这里也必须写明所需要的数组的大小,但是这个大小不一定是常量,可以是变量,可以用户来输入这个变量的大小eg .int *p = new int[size]. 只是在...原创 2020-06-22 11:29:27 · 101 阅读 · 0 评论 -
const限定符
在创建符号常量的时候,使用const来时声明的时候,应该在声明的时候进行初始化,初始化之后就不能再修改了和#define作用一样,但是比他好,因为(1)指出了常量的类型:const int Mouth= 2;(2)可以使用c++的作用域规则将常量限制在某个函数或者范围内(3)可以将constin应用于更复杂的类型,如数组等。...原创 2020-06-22 11:29:46 · 83 阅读 · 0 评论 -
递减栈
739. 每日温度请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用0 来代替。例如,给定一个列表temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是[1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是[1, 30000]。每个气温的值的均为华氏度,都是在[30, 100]范围内的整数。栈中村的是列表...原创 2020-06-11 23:04:01 · 181 阅读 · 0 评论 -
makefile
makefile就是将在命令行写的命令放在了名叫makefile的文件里c++的运行过程:预处理——编译——汇编——链接预处理:g++ -E hello.cpp -o hello.i -E预处理的指令,-o是输出的指令编译: g++ -S hello.o -o hello.S 汇编: g++ -c hello.S -o hello.o. .o是目标文件链接:g++ hello.o -o hello 一...原创 2020-06-05 14:15:26 · 147 阅读 · 0 评论 -
Mac编译c++命令行参数
使用终端对cpp进行编译,运行在main函数里面,有两个参数,#include<iostream>using namespace std;int main(int argc,char *argv[]){ for(int i=0;i<argc;i++) cout<<"Argument"<<i<<" is"<<argv[i]<<endl; return 0;}argc是参数的个数,会自动计算argh[原创 2020-06-05 09:01:53 · 588 阅读 · 0 评论 -
优先队列
引的某个文章的,不知道是哪个了。。。。普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除。在优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除。优先队列具有最高级先出 (first in, largest out)的行为特征。首先要包含头文件#include<queue>, 他和queue不同的就在于我们可以自定义其中数据的优先级, 让优先级高的排在队列前面,优先出队。优先队列具有队列的所有特性,包括队列的基本操作,只是在这基础上添加.原创 2020-06-04 22:06:48 · 130 阅读 · 0 评论 -
c++ 赋值运算符重载和复制构造函数
重载赋值运算符:对象之间赋值,所以要重载= //str1 = str2;//赋值运算符,如果没有重载的话,会使他们指向同一个内存空间复制构造函数:一个对象使用另一个对象来初始化就需要复制构造函数,当然还有其他的功能时也需要 String str2(str1);//复制构造函数...原创 2020-06-02 12:08:08 · 420 阅读 · 0 评论 -
c++ 类型转换构造函数
自定义的类型转换有四种:默认构造函数,带参数的构造函数,复制构函数和转换构造函数其中转换构造函数:原创 2020-05-22 14:29:34 · 247 阅读 · 0 评论 -
c++ 类 构造函数 封装
1.封装,就是先把成员变量私有,然后要访问他就必须给他封装,可以是get set方法2.构造函数,进行初始化成员变量原创 2020-05-21 16:33:26 · 254 阅读 · 0 评论 -
c++函数模板
关键字typename也可以使用class(早期使用的)如果说重载的函数,就是除了参数的类型不同的话,我们可以用函数模版来实现,而不用,再写很多的重载函数了,但是如果重载的里面的功能不一样,函数模板是不能替代的,他只是可以用模版头定义虚拟的数据类型,当然这个数据类型不仅仅是参数的数据类型,函数里面的所有的数据都可以使用,包括返回值。函数重载只关系参数不同,对于返回值不关系,也就是他可以相同,也可以不同...原创 2020-05-21 16:29:20 · 92 阅读 · 0 评论 -
c++引用
只是给对象起了个别名,必须杯初始化,使用这个引用,就可以找到原始数据,他就是一个指针,const的指针。原创 2020-05-21 08:56:33 · 129 阅读 · 0 评论 -
c++内联函数
使用内联函数可以直接调用代码块,而不用再去通过函数的地址去找该函数,这样在函数块比较小的情况下,会加快速度。和c语言的宏的定义类似原创 2020-05-21 08:43:00 · 124 阅读 · 0 评论 -
c++函数指针
先定义函数,再定义函数指针,就是可以把一个函数当作参数来传递原创 2020-05-20 22:57:54 · 76 阅读 · 0 评论 -
cmake编译c++步骤
1.进入当前项目目录2.把编译的文件啥的放在一个目录,所以新建一个文件build进行编译mkdir buildcd buildcmake ..make./工程的名字(生成的一个可执行文件)原创 2020-05-14 12:01:06 · 428 阅读 · 0 评论 -
12.类和动态内存分配
通常情况,分配内存时最好是在程序运行的时候而不是在编译的时候进行确定内存,C++通常是在类构造函数中使用new运算符来在程序运行的时候分配所需的内存。注:1.在构造函数中使用new来分配内存时,必须在相应的析构函数中使用delete来释放内存。如果是使用new[],则使用delete[];2.通常要有复制构造函数(复制构造函数用于将一个对象复制到新创建的对象中,也就是说,他用于初始化过...原创 2020-05-07 17:54:42 · 129 阅读 · 0 评论 -
vector二维数组运用
832.Flipping an ImageEasy552114FavoriteShareGiven a binary matrixA, we want to flip the image horizontally, then invert it, and return the resulting image.To flip an image horizontally means...原创 2019-07-31 11:12:55 · 1115 阅读 · 0 评论 -
1089. Duplicate Zeros
Given a fixed lengtharrayarrof integers, duplicate each occurrence of zero, shifting the remaining elements to the right.Note that elements beyond the length of the original array are not written...原创 2019-07-29 17:22:29 · 293 阅读 · 0 评论 -
vector.size()
正确使用vector.size-1,应该是符号问题。原创 2019-07-29 17:14:36 · 831 阅读 · 0 评论