![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++学习历程
文章平均质量分 51
hfflib
这个作者很懒,什么都没留下…
展开
-
c++多态
定义:相同对象收到不同消息或不同对象收到相同消息时产生不同的动作。静态多态(早绑定):在编译之后,已经知道使用的是哪一个函数了动态多态(晚绑定):动态多态需要以封装和继承为基础。(起码要两个类)想要实现多态的成员函数前添加virtual关键字,形成虚函数,子类的同名函数前可以不加,系统会自动加上,建议自己加上,看着明显。 ↓多态具体到语法中是指,使用原创 2017-12-28 19:56:47 · 162 阅读 · 0 评论 -
C++ 拷贝构造函数
转载 2017-10-24 18:32:48 · 188 阅读 · 0 评论 -
继承中的特点
继承中的特点有public, protected, private三种继承方式,它们相应地改变了基类成员的访问属性。1.public 继承:基类 public 成员,protected 成员,private 成员的访问属性在派生类中分别变成:public, protected, private2.protected 继承:基类 public 成员,protect转载 2017-10-24 11:08:47 · 453 阅读 · 0 评论 -
C++ 引用调用
C++ 引用调用 C++ 函数向函数传递参数的引用调用方法,把引用的地址复制给形式参数。在函数内,该引用用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。按引用传递值,参数引用被传递给函数,就像传递其他值给函数一样。因此相应地,在下面的函数 swap() 中,您需要声明函数参数为引用类型,该函数用于交换参数所指向的两个整数变量的值。// 函数定义转载 2017-10-23 20:33:08 · 637 阅读 · 0 评论 -
初级篇——指针(*)、取地址(&)、解引用(*)与引用(&)的区别
1. 初步了解——指针与取地址先看程序:[cpp] view plain copy#include int main(void) { int num = 7; int *p = #//初始化指针,也可以写作int* p = # printf("%d 的地址是转载 2017-10-23 20:31:07 · 6457 阅读 · 0 评论 -
C++ 指针调用
C++ 指针调用 C++ 函数向函数传递参数的指针调用方法,把参数的地址复制给形式参数。在函数内,该地址用于访问调用中要用到的实际参数。这意味着,修改形式参数会影响实际参数。按指针传递值,参数指针被传递给函数,就像传递其他值给函数一样。因此相应地,在下面的函数 swap() 中,您需要声明函数参数为指针类型,该函数用于交换参数所指向的两个整数变量的值。// 函数定义原创 2017-10-23 20:25:01 · 293 阅读 · 0 评论 -
存储类-static extern
static 存储类static 存储类指示编译器在程序的生命周期内保持局部变量的存在,而不需要在每次它进入和离开作用域时进行创建和销毁。因此,使用 static 修饰局部变量可以在函数调用之间保持局部变量的值。static 修饰符也可以应用于全局变量。当 static 修饰全局变量时,会使变量的作用域限制在声明它的文件内。在 C++ 中,当 static 用在类数据成员上原创 2017-10-23 19:46:50 · 238 阅读 · 0 评论 -
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 · 4161 阅读 · 0 评论 -
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 · 1482 阅读 · 0 评论 -
C++派生、友元类
派生可以访问protected成员友元可以访问private与protected成员【重点:友元函数并不是成员函数。】原创 2017-10-24 19:11:03 · 387 阅读 · 0 评论 -
c++内联函数
C++ 内联函数是通常与类一起使用。如果一个函数是内联的,那么在编译时,编译器会把该函数的代码副本放置在每个调用该函数的地方。对内联函数进行任何修改,都需要重新编译函数的所有客户端,因为编译器需要重新更换一次所有的代码,否则将会继续使用旧的函数。如果想把一个函数定义为内联函数,则需要在函数名前面放置关键字 inline,在调用函数之前需要对函数进行定义。如果已定义的函数多于一行,编转载 2017-10-24 19:40:23 · 161 阅读 · 0 评论 -
C++ this 指针
在 C++ 中,每一个对象都能通过 this 指针来访问自己的地址。this 指针是所有成员函数的隐含参数。因此,在成员函数内部,它可以用来指向调用对象。友元函数没有 this 指针,因为友元不是类的成员。只有成员函数才有 this 指针原创 2017-10-24 19:46:27 · 193 阅读 · 0 评论 -
c++继承
实例化一个子类必然先实例化一个基类销毁时先销毁子类再销毁基类公有继承:保护继承:私有继承:隐藏:父子关系,成员同名,隐藏(父类的同名函数被隐藏,不过可以通过特殊方法访问到)就算参数不同,也会隐藏!is-a关系:父类指针指向子类对象只能访问到父类拥有的成员。在继承关系中,父类指针指向堆中的子类对象,并且想用父类指针销毁这原创 2017-12-28 18:14:29 · 141 阅读 · 0 评论 -
c++类中常成员与常成员函数
常成员:必须要用初始化列表进行初始化。如下↓常成员函数:常成员函数中不能改变数据成员的值!因为:void changeX(const Coordinate *this)this作为常指针不能改变xxx const 与 xxx 互为重载如何调用常成员函数:通过const实例化对象,叫做常对象,再调用成员函数,即调用的是常成员原创 2017-12-27 22:30:36 · 925 阅读 · 0 评论 -
C++ 标准模板类
1.标准模板库1.1 vector 向量本质:vector是对数组的封装。初始化方法:迭代器:iterator使用方法:相当于指针list只能使用iterator进行遍历,过程与vector一样。map的遍历略有不同,需要单独输出每一对数据的第一个和第二个,如图所示:1.2 list 链原创 2018-01-03 10:54:42 · 635 阅读 · 0 评论 -
c++ 模板函数、模板类
1.函数模板关键字:template、typename、class这里的class不是表示类,而是表示数据类型1.1类型作为模板参数class后的T表示为一种数据类型,当传入类型参数时,系统自动实例化;可以使用typename替换class,效果一样;T max(T a, T b) 称为函数模板;通过函数模板生成的函数叫模板函数,如下:原创 2018-01-02 22:41:44 · 313 阅读 · 0 评论 -
c++ static、运算符重载
1.static静态数据成员静态成员函数使用场景:即使不实例化对象,静态成员iCount的值始终在内存中存在。普通数据成员则不会。静态成员不依赖对象的实例化,它的实例化必须单独进行,如上图:int Tank::s_iCount = 0;调用方法:静态成员函数无法调用非静态的数据成员或成员函数:因为静态成员函数不传入原创 2018-01-02 20:44:29 · 1732 阅读 · 0 评论 -
c++友元全局函数、友元成员函数、友元类
1.友元函数关键字:friend 特性:一个类的友元函数,可以访问到类中私有成员推荐使用引用的方法取访问私有成员,更高效友元的定义写在public下和private下都是正确的,不过为了直观应写在开头2.友元成员函数将一个类的成员函数声明为另一个类的友元3.友元类定义一个类为另一个类的友元类,在Circle类中定义一原创 2018-01-02 20:27:25 · 1529 阅读 · 0 评论 -
c++ RTTI(运行时类型识别) 与 异常处理
1.RTTIRun Time Type Identificationtypeid:“==”为函数重载,方便比较对象类型dynamic_cast:dynamic_cast( );要转换的和被转换的类型必须有虚函数,如下typeid:返回的指针类型见下图原创 2018-01-02 16:20:58 · 625 阅读 · 0 评论 -
c++ 多态 (第二部分)
1.纯虚函数,抽象类纯虚函数在虚函数表中,值为零包含纯虚函数的类叫做抽象类抽象类无法实例化对象,因为对象无法调用纯虚函数抽象类的子类也有可能是抽象类只有抽象类的子类把所有抽象类中的纯虚函数都做了实现,才可以实例化对象。2.接口类如果抽象类中只有纯虚函数,而没有其他任何东西,那么这个类就叫做接口类。(无任何数据成员且成员函数都是纯虚函数)原创 2018-01-02 11:22:22 · 180 阅读 · 0 评论 -
C++ 类的静态成员、静态成员函数
我们可以使用 static 关键字来把类成员定义为静态的。当我们声明类的成员为静态时,这意味着无论创建多少个类的对象,静态成员都只有一个副本。静态成员在类的所有对象中是共享的。如果不存在其他的初始化语句,在创建第一个对象时,所有的静态数据都会被初始化为零。我们不能把静态成员的初始化放置在类的定义中,但是可以在类的外部通过使用范围解析运算符 :: 来重新声明静态变量从而对它进行初始化,如下面转载 2017-10-24 21:02:27 · 316 阅读 · 0 评论 -
读取数字的循环,用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 · 449 阅读 · 0 评论 -
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 · 3853 阅读 · 0 评论 -
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 · 2293 阅读 · 0 评论 -
表达式(x<y)将被判定为bool值ture或false
#include "stdafx.h"#includeint _tmain(int argc, _TCHAR* argv[]){ using namespace std; int x; cout<<"x="<<(x=100)<<endl; cout<<"now x="<<x<<endl; cout<<"the expression x<3 has the value:"<<(x<原创 2016-10-16 09:47:35 · 921 阅读 · 0 评论 -
使用array数组存储数据
// practice4-10.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include int _tmain(int argc, _TCHAR* argv[]){ int i; using namespace std; arrayspeed={}; cout<<"Enter three times 40 mete原创 2016-10-14 13:41:19 · 1256 阅读 · 0 评论 -
使用new来为动态分配结构数组并赋值
// practice4-9.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include #include using namespace std;struct CandyBar { string brand; double weight; int calorie;};int _tmain(int argc, _原创 2016-10-14 11:48:38 · 7860 阅读 · 0 评论 -
使用new为结构分配内存而不是声明一个结构变量
// practice4-8.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include const int len = 70;struct pizza { char brand[len]; double diameter; double weight;};int _tmain(int argc, _TCHAR* argv[]){原创 2016-10-14 10:47:04 · 1927 阅读 · 0 评论 -
简单的struct数组
// practice4-6.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include struct CandyBar { char brand[20]; double weight; int calorie;};int _tmain(int argc, _TCHAR* argv[]){ using namespace std;原创 2016-10-14 10:05:31 · 447 阅读 · 0 评论 -
由用户对struct变量的输入输出方法
// practice4-7.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include const int len = 70;struct pizza{ char brand[len]; double diameter; double weight;};int _tmain(int argc, _TCHAR* argv[]){原创 2016-10-14 10:21:52 · 1877 阅读 · 0 评论 -
string对象代替char数组实现字符串的组合存储并显示
// practice4-4.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include int _tmain(int argc, _TCHAR* argv[]){ using namespace std; string firstName; string lastName; string fullName; co原创 2016-10-14 09:23:52 · 422 阅读 · 0 评论 -
char数组利用cstring中的函数strncpy,strcat,strncat合并字符串并保存显示
// practice4-3.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include #include const int size = 20;int _tmain(int argc, _TCHAR* argv[]){ using namespace std; char firstName[size]; char lastName原创 2016-10-13 21:50:34 · 1892 阅读 · 0 评论 -
string代替char数组的输入输出以及利用getline每次读取一行字符串
// practice4-2.cpp : 定义控制台应用程序的入口点。//利用string代替char数组的输入输出#include "stdafx.h"#include#include int _tmain(int argc, _TCHAR* argv[]){ using namespace std; string name; string dessert; cout<原创 2016-10-13 21:09:36 · 758 阅读 · 0 评论 -
c++中创建动态结构以及输入B输出C实现方法
// practice4-1.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include using namespace std;struct inflatable //创建结构{ char FirstName[20]; char LastName[20]; char Grade; int Age;};int _tmain(in原创 2016-10-13 20:30:10 · 407 阅读 · 0 评论 -
使用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 · 2322 阅读 · 0 评论 -
*++pt;++*pt;(*pt)++;*pt++的区别
前缀递增(递减)遵循从右到左的顺序后缀运算符优先级比前缀高*++pt:先++应用于pt,再将*应用于被递增后的pt++*pt:先取得pt的值,再将值加1,指向位置不变(*pt)++:先对指针解除引用,得到值,然后将这个值加1,指针指向位置不变*pt++:++先用于pt,对指针递增,但是后缀运算符是对原来的地址而不是递增后的地址解除引用,因此若double * pt =原创 2016-10-16 11:19:37 · 2820 阅读 · 1 评论 -
利用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 · 2159 阅读 · 0 评论 -
?:运算符常被用来代替c++种的if else 语句
expression1?expression2:expression3如果expression1为true,则整个表达式值为expression2的值,否则为expression3的值适用于简单关系和简单表达式的值原创 2016-10-20 10:09:59 · 3277 阅读 · 0 评论 -
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 · 512 阅读 · 0 评论 -
++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 · 2403 阅读 · 0 评论