- 博客(51)
- 资源 (1)
- 收藏
- 关注
原创 C++ 标准模板类
1.标准模板库1.1 vector 向量本质:vector是对数组的封装。初始化方法:迭代器:iterator使用方法:相当于指针list只能使用iterator进行遍历,过程与vector一样。map的遍历略有不同,需要单独输出每一对数据的第一个和第二个,如图所示:1.2 list 链
2018-01-03 10:54:42 653
原创 c++ 模板函数、模板类
1.函数模板关键字:template、typename、class这里的class不是表示类,而是表示数据类型1.1类型作为模板参数class后的T表示为一种数据类型,当传入类型参数时,系统自动实例化;可以使用typename替换class,效果一样;T max(T a, T b) 称为函数模板;通过函数模板生成的函数叫模板函数,如下:
2018-01-02 22:41:44 326
原创 c++ static、运算符重载
1.static静态数据成员静态成员函数使用场景:即使不实例化对象,静态成员iCount的值始终在内存中存在。普通数据成员则不会。静态成员不依赖对象的实例化,它的实例化必须单独进行,如上图:int Tank::s_iCount = 0;调用方法:静态成员函数无法调用非静态的数据成员或成员函数:因为静态成员函数不传入
2018-01-02 20:44:29 1749
原创 c++友元全局函数、友元成员函数、友元类
1.友元函数关键字:friend 特性:一个类的友元函数,可以访问到类中私有成员推荐使用引用的方法取访问私有成员,更高效友元的定义写在public下和private下都是正确的,不过为了直观应写在开头2.友元成员函数将一个类的成员函数声明为另一个类的友元3.友元类定义一个类为另一个类的友元类,在Circle类中定义一
2018-01-02 20:27:25 1557
原创 c++ RTTI(运行时类型识别) 与 异常处理
1.RTTIRun Time Type Identificationtypeid:“==”为函数重载,方便比较对象类型dynamic_cast:dynamic_cast( );要转换的和被转换的类型必须有虚函数,如下typeid:返回的指针类型见下图
2018-01-02 16:20:58 652
原创 c++ 多态 (第二部分)
1.纯虚函数,抽象类纯虚函数在虚函数表中,值为零包含纯虚函数的类叫做抽象类抽象类无法实例化对象,因为对象无法调用纯虚函数抽象类的子类也有可能是抽象类只有抽象类的子类把所有抽象类中的纯虚函数都做了实现,才可以实例化对象。2.接口类如果抽象类中只有纯虚函数,而没有其他任何东西,那么这个类就叫做接口类。(无任何数据成员且成员函数都是纯虚函数)
2018-01-02 11:22:22 189
原创 c++多态
定义:相同对象收到不同消息或不同对象收到相同消息时产生不同的动作。静态多态(早绑定):在编译之后,已经知道使用的是哪一个函数了动态多态(晚绑定):动态多态需要以封装和继承为基础。(起码要两个类)想要实现多态的成员函数前添加virtual关键字,形成虚函数,子类的同名函数前可以不加,系统会自动加上,建议自己加上,看着明显。 ↓多态具体到语法中是指,使用
2017-12-28 19:56:47 168
原创 c++继承
实例化一个子类必然先实例化一个基类销毁时先销毁子类再销毁基类公有继承:保护继承:私有继承:隐藏:父子关系,成员同名,隐藏(父类的同名函数被隐藏,不过可以通过特殊方法访问到)就算参数不同,也会隐藏!is-a关系:父类指针指向子类对象只能访问到父类拥有的成员。在继承关系中,父类指针指向堆中的子类对象,并且想用父类指针销毁这
2017-12-28 18:14:29 153
原创 c++类中常成员与常成员函数
常成员:必须要用初始化列表进行初始化。如下↓常成员函数:常成员函数中不能改变数据成员的值!因为:void changeX(const Coordinate *this)this作为常指针不能改变xxx const 与 xxx 互为重载如何调用常成员函数:通过const实例化对象,叫做常对象,再调用成员函数,即调用的是常成员
2017-12-27 22:30:36 953
转载 C++ 类的静态成员、静态成员函数
我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化,如下面
2017-10-24 21:02:27 327
原创 C++ this 指针
在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针
2017-10-24 19:46:27 225
转载 c++内联函数
C++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 inline,在调用函数之前需要对函数进行定义。如果已定义的函数多于一行,编
2017-10-24 19:40:23 185
转载 继承中的特点
继承中的特点有public, protected, private三种继承方式,它们相应地改变了基类成员的访问属性。1.public 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:public, protected, private2.protected 继承:基类 public 成员,protect
2017-10-24 11:08:47 477
转载 C++ 引用调用
C++ 引用调用 C++ 函数向函数传递参数的引用调用方法,把引用的地址复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。按引用传递值,参数引用被传递给函数,就像传递其他值给函数一样。因此相应地,在下面的函数 swap() 中,您需要声明函数参数为引用类型,该函数用于交换参数所指向的两个整数变量的值。// 函数定义
2017-10-23 20:33:08 653
转载 初级篇——指针(*)、取地址(&)、解引用(*)与引用(&)的区别
1. 初步了解——指针与取地址先看程序:[cpp] view plain copy#include int main(void) { int num = 7; int *p = #//初始化指针,也可以写作int* p = # printf("%d 的地址是
2017-10-23 20:31:07 6472
原创 C++ 指针调用
C++ 指针调用 C++ 函数向函数传递参数的指针调用方法,把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。按指针传递值,参数指针被传递给函数,就像传递其他值给函数一样。因此相应地,在下面的函数 swap() 中,您需要声明函数参数为指针类型,该函数用于交换参数所指向的两个整数变量的值。// 函数定义
2017-10-23 20:25:01 309
原创 存储类-static extern
static 存储类static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。在 C++ 中,当 static 用在类数据成员上
2017-10-23 19:46:50 269
转载 编译原理是什么?怎么学?
我有个老师有意思,说“上我的课就要学会写编译器”,能运行的那种。他把编译器解释成“把一个装着程序的字符串切成词,把词组装成树,然后把树弄成线性的”这么个过程,可以说通常情况下,编译器就是这么个过程。 我认为这门课是一门真正与代码做斗争的课程,对于一个有至于追求技术的人是不容错过的课程,而且编译原理可以说是一个计算机科学的缩影。你学习它更多的是去追寻程序设计语言的本质,如
2016-12-01 21:26:28 2967
原创 C++中的cout.setf()跟cout.precision()的作用
这两个就是格式控制的~ostream成员函数里面的,也可以用输出流操作符来控制,都一样的~附给你一些看看~其中cout.setf跟setiosflags一样的,cout.precision跟setprecision一样~#include 这里面iomanip的作用比较多: 主要是对cin,cout之类的一些操纵运算子,比如setfill,setw,setbase,setprecisi
2016-10-20 21:52:14 4214
原创 读取数字的循环,用cin表达式的值判断错误输入并清除cin流接受新的输入
cin>>fish[i]实际上是一个cin函数的调用,该函数返回cin。如果cin位于测试条件中,则将被转化为bool类型,输入成功则转化后的值为true,否则为false。不匹配的输入将被留在输入队列中 而且cin对象中的一个错误标记被设置// practice6-13.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#includecon
2016-10-20 19:19:53 484
原创 continue下面的space++为什么不计算字母字符的个数!!!
continue下面的space++为什么不计算字母字符的个数!!!// practice6-12.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include const int ArSize = 80;int main(){ using namespace std; char line[ArSize]; int spaces = 0
2016-10-20 11:22:59 352
原创 cin.get(line,ArSize) cin.getline(line,ArSize)和getline(cin,name)读取一行字符串区别
cin.get(line,ArSize)应用于char数组,比如 char line[ArSize];getline(cin,name)用于string字符串,比如 string name;
2016-10-20 11:03:30 1509
原创 switch语句的简单应用(屏幕菜单)
// practice6-10.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;void showmenu(); //显示屏幕菜单void report();void comfort();int _tmain(int argc, _TCHAR* argv[]){ showmenu()
2016-10-20 10:36:53 2333
原创 ?:运算符常被用来代替c++种的if else 语句
expression1?expression2:expression3如果expression1为true,则整个表达式值为expression2的值,否则为expression3的值适用于简单关系和简单表达式的值
2016-10-20 10:09:59 3304
原创 cctype函数(isalpha,isdigits,isspace,ispunct......)
// cctypes.cpp -- using the ctype.h library#include #include // prototypes for character functionsint main(){ using namespace std; cout << "Enter text for analysis, and type
2016-10-20 09:52:07 542
转载 char,char*,char**数组
平时都用的是char数组,基本忘记了char*数组和char**数组该怎么用了char s1[10];s1[0]s1[1]等都是chars1是char*,等同于&s1[0] char*s2[10];s2[0]s2[1]等都是char**s2[0]*s2[1]等都是char,是s2[0] s2[1]指向的字符串的第一个字符s2是char**,等同于&s2[0]
2016-10-20 08:52:40 3892
原创 ++ch和ch+1的区别
ch+1//将ch转换成int然后和1相加后输出(隐式类型转换,因为1是int型)++ch//输出下一个对应的字符(输入A,就输出B)#include "stdafx.h"#include int _tmain(int argc, _TCHAR* argv[]){ using namespace std; char ch; cout<<"Enter some word:\
2016-10-18 10:38:51 2430
原创 使用for()嵌套循环输出二维数组
// ex5-20.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include const int citys=5;const int year=4;int _tmain(int argc, _TCHAR* argv[]){ using namespace std; const char * city[citys]= { "Bei
2016-10-16 21:51:11 5421
原创 char *const p;与 const char * p;的区别
char *const p 修饰指针为常量 指针指向内容可以是变量~既 p++这样的操作不合法 *p='3' 合法const char * p 是p指向的内容是常量,p是变量,既 p++合法 *p='3' 不合法
2016-10-16 21:36:53 485
原创 使用fail()函数来检测文件尾
检测到EOF后,cin将两位(eofbit和failbit)都设置为1,应将cin.eof()或cin.fail()测试放在读取后cin.fail()可用于更多的实现中#include "stdafx.h"#include int _tmain(int argc, _TCHAR* argv[]){ using namespace std; char ch; cou
2016-10-16 20:59:17 1927
原创 cin对象3种不同模式的单字符输入在while循环中的应用(循环显示,计算总字符数)
通过while循环显示输入的字符并计算总字符数1.cin>>ch此方式忽略空格和换行符#include "stdafx.h"#include int _tmain(int argc, _TCHAR* argv[]){ using namespace std; char ch; cout<<"Enter characters:enter # to quit:\n";
2016-10-16 20:27:26 480
原创 利用ctime中的clock()编写延时循环
// ex5-14.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include //describes clock()function,clock_t typeint _tmain(int argc, _TCHAR* argv[]){ using namespace std; cout<<"Enter the dela
2016-10-16 17:11:33 1054
原创 for()循环和while()循环
两者本质上是一样的for循环需要3个表达式(可以为空,但是要有分号),省略测试表达式,测试结果为true,会一直循环差别:1、for循环中可以使用初始化语句声明一个局部变量,while不能2、包含continue语句时情况不同3、for循环允许将所有相关信息(初始值、终止值、更新计数器的方法)放在同一个地方; 在无法知道循环次数的时候,选择使用while循环
2016-10-16 16:29:43 366
原创 利用string类重载运算符!=比较string类字符串
// ex5-11.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ string word="?ate"; for (char ch='a';word!="mate";++ch) { c
2016-10-16 16:09:52 2185
原创 使用cstring中的strcmp()函数比较字符数组中的字符串
// ex5-11.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include#include using namespace std;int _tmain(int argc, _TCHAR* argv[]){ char word[5]="?ate"; for (char ch='a';strcmp(word,"mate");++ch
2016-10-16 15:55:57 1249
原创 数组名地址为什么和数组第一个元素的地址不同?
#include "stdafx.h"#includeusing namespace std;int _tmain(int argc, _TCHAR* argv[]){ string word; word="apple"; cout<<&word<<endl; cout<<&"apple"<<endl; system("pause"); return 0;}
2016-10-16 15:40:05 1424
原创 *++pt;++*pt;(*pt)++;*pt++的区别
前缀递增(递减)遵循从右到左的顺序后缀运算符优先级比前缀高*++pt:先++应用于pt,再将*应用于被递增后的pt++*pt:先取得pt的值,再将值加1,指向位置不变(*pt)++:先对指针解除引用,得到值,然后将这个值加1,指针指向位置不变*pt++:++先用于pt,对指针递增,但是后缀运算符是对原来的地址而不是递增后的地址解除引用,因此若double * pt =
2016-10-16 11:19:37 2877 1
原创 使用for循环访问string字符串
#include "stdafx.h"#include #include int _tmain(int argc, _TCHAR* argv[]){ using namespace std; string str; cout<<"Enter a word:"; cin>>str; for (int i=str.size()-1;i>=0;--i)//不考虑空值字符 { c
2016-10-16 10:53:24 2361
基于SAD法图片匹配(matlab)
2018-01-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人