- 博客(746)
- 资源 (13)
- 收藏
- 关注
原创 C++中stringstream类3
可以使用tellp()函数和tellg()函数获取输入输出流当前的位置。其中,tellp()中的p表示put,对应的是输出流的位置;tellg()中的g表示get,对应的输入流的位置。1 tellp()函数ostringstreamoss;streamposi =oss.tellp();其中,oss是输入字符串流ostringstream类的对象,通过该对象调用tellp()函数获取输出流的当前位置,该函数的返回值类型是streampos,表示流的位置。streampos中有一个_in...
2020-12-25 11:13:20 799
原创 C++中stringstream类2
在《C++中stringstream类1》中提到,输入字符串流和输出字符串流对应的类分别是istringstream和ostringstream。stringstream类是输出输出字符串流,既可以实现输出功能又可以实现输入功能。通过stringstream类可以实现C++中内嵌类型的相互转换。1 string与int的互相转换stringstreamsstr;inta;stringstr("100");sstr <<str;sstr >>a;在《C+...
2020-12-22 10:13:14 158
原创 C++中stringstream类1
C++中与控制台相关的输入输出流是iostream类、istream类和ostream类。cin和cout是istream类和ostream类的对象,分别向控制台读取和写入数据。除了对控制台进行IO操作外,还需要对字符串进行IO操作,这就需要另外的输入输出流类stringstream、istringstream和ostringstream。以上三种类型在头文件sstream中定义。1 字符串输入流类istringstream可以使用以下代码定义字符串输入流类的对象istringstreami.
2020-12-16 10:38:14 517 2
原创 C++中类的静态成员3-3
1 静态自身类型的成员变量可以声明为类类型在《C++中类的前向声明》中提到,在类中定义自身类型的成员变量时,由于类还没有定义完全,所以只能将该成员变量定义为自身类型的指针或引用。classMyClass{ MyClass*m_mc1; MyClass&m_mc2; staticMyClasss_mc;};其中,m_mc1的类型是MyClass类的指针;m_mc2的类型是MyClass类的引用。而对于静态成员s_mc来说,可以将其直接声明为MyClass类...
2020-12-14 10:44:27 384
原创 C++中类的静态成员3-2
在《C++中类的静态成员2-1》中提到,类的静态成员变量不能在类内部定义。当类的静态成员变量是constexpr时,可以在类中为其提供整数类型的类内初始值。1 constexpr的静态成员可以进行类内定义classmyClass{ public: staticconstexprinti = 2; inta[i];};其中,类myClass的静态成员变量i是constexpr,因此可以在类内部对其进行定义,而数组a是一个维度是i的int数组,编译器此时将i...
2020-12-12 09:59:43 259
原创 C++中类的静态成员3-1
C++类的普通成员变量与成员函数是与该类的对象有关,类的静态成员与对象无关,而与该类本身相关。1 静态成员的声明使用关键字static修饰的成员是类的静态成员。静态成员可以被声明成public或private,静态成员可以是常量、引用、指针、类类型和函数等。2 静态成员的定义2.1 静态函数的定义2.1.1 类外部定义静态函数时不能使用static可以在类的内部定义静态函数,也可以在类的外部定义静态函数。需要注意的是,static关键字只能在类内部出现,而在类外部定义静态函数时,不能
2020-12-11 10:52:57 276 4
原创 C++中字面值常量类
1 字面值类型C++中把一般都比较简单,值也显而易见、容易得到的类型称作“字面值类型”。例如,算术类型、引用和指针都属于字面值类型。2 字面值常量类2.1 聚合类与字面值常量类数据成员都是字面值类型的聚合类是字面值常量类。classmyClass{ public: inti; charch;};其中,myClass是字面值常量类。关于聚合类的相关内容,请参考《C++中的聚合类》。2.2 constexpr构造函数字面值常量类必须至少提供一个 c...
2020-12-09 10:57:29 942
原创 C++中strtol函数的使用方法
1 作用strtol()函数的作用是将字符串类型转换为相应的long类型。2 格式strtol()函数的格式为long strtol( const char *string, char **end_ptr, int base );其中,参数string是要转换的字符串,end_ptr是字符串的指针,该指针指向了参数string中没有被转换的部分,如果不需要该参数,可以将其设置为NULL;参数base表示转换的进制。如果转换成功,strtol()函数的返回值是转换后的long类型的值,如
2020-12-04 10:56:31 13762
原创 C++中constexpr函数
1 简介constexpr函数指的是在编译的时候就能得到其返回值的函数,也就是说编译器将constexpr函数直接转换成其返回值,因此,constexpr函数都是被隐式地定义为内联函数。使用constexpr关键字来修饰constexpr函数。2 使用方法有如下代码:constexprintmyFunc(){ return1;}constexprinti = myFunc() * 4;此时,编译器会将myFunc()函数用其返回值1来代替,在编译时就可知i的值是4。...
2020-12-02 10:27:16 14758 15
原创 C++中的聚合类
1 定义C++中的聚合类满足以下条件(1)所有成员都是public(2)没有定义任何构造函数(3)没有类内初始值(4)没有基类和虚函数。2 用途聚合类可以使得用户直接访问其成员。classMyClass{ public: intm_i; charm_ch;};其中,MyClass满足聚合类的条件,是一个聚合类。可以通过以下代码为MyClass创建对象。MyClassmc = { 1, 'a'};此时,mc.m_i的值是1,mc.m_ch的值是...
2020-11-27 15:30:41 1743
原创 C++中的转换构造函数2-2
C++的转换构造函数可以将构造函数参数类型隐式地转换为类类型。可以使用explicit关键字来禁止这种默认的类型转换。1 explicit关键字用explicit关键字修饰转换构造函数,MyClass类的代码如下所示classMyClass{ public: intm_i; public: explicitMyClass(inti) { m_i = i; }};此时,MyClass类的转换构造函数被定义为explicit。再...
2020-11-25 10:35:33 477
原创 C++中的转换构造函数2-1
1 定义C++中的转换构造函数指的是只包含一个实参的构造函数。可以通过该构造函数实现从构造函数参数类型向类类型的隐式转换。2 实例以下自定义类MyClass的代码classMyClass{ public: intm_i; public: MyClass(inti) { m_i = i; }};其中,MyClass的构造函数只有一个int类型的形参,此时可以通过该构造函数实现int类型向MyClass类型的隐式转换。...
2020-11-24 10:13:39 276
原创 C++中类的默认构造函数调用的时机
1 不指定类对象的初始值时当不使用任何初始值定义一个类的非静态变量时,会调用该类的默认构造函数。Aa;此时,会调用类A的默认构造函数。在《C++中类的合成默认构造函数2-1》https://blog.csdn.net/hou09tian/article/details/108072603中提到,如果类中没有显式地定义默认构造函数,则C++编译器会为其创造一个合成的默认构造函数,如果类中已经定义了其他格式的构造函数,此时C++编译器不会再为其合成默认构造函数。所以,如果此时类A的定义为c.
2020-11-17 11:06:28 3864
原创 C++中委托构造函数
在C++中,假设有如下定义的类classmyClass{public: inti; charch; doubled; myClass(inti= 0, charch= ' ', doubled= 0.0):i(i), ch(ch), d(d) { }};其中,自定义类myClass的构造函数中,每个参数都有默认值,该构造函数相当于默认构造函数。1 仅指定类中某个成员变量的值当想要为某一成员变量赋初值时,可以使用如下方法myClassmc...
2020-11-14 10:44:02 380
原创 C++构造函数初始化变量的顺序
在《C++中类的构造函数初始值列表》中提到,C++中类的构造函数初始值列表可以对类的成员进行初始化。1 构造函数的初始化列表只是说明各变量的初始值但是需要注意的是,构造函数的初始化列表只是说明各变量的初始值,并没有指定变量的初始化顺序。其中,myClass类构造函数的初始化列表只是说明了变量i的初始值是1,变量j的初始值是i的值。但是并不一定是先初始化i而后初始化j。classmyClass{public: intj; inti; myClass():i(1), j(...
2020-11-11 09:54:49 1549
原创 C++中类的构造函数初始值列表
1 通过构造函数初始值列表来初始化成员变量C++中类的构造函数初始值列表可以对类的成员进行初始化。classmyClass{ public: inti; myClass(): i(1) { }};其中,类myClass的构造函数中包含了初始值列表,对成员变量i进行初始化。2 通过构造函数的函数体来初始化成员变量除了通过构造函数初始值列表来初始化成员变量外,还可以通过构造函数的函数体来初始化成员变量。classmyClass{ public: i...
2020-11-10 11:01:38 901 5
原创 C++类成员函数中的名字查找
在C++类的成员函数中,名字查找是按照由内到外进行的。首先查找成员函数中的名字,之后再查找类中定义的名字,最后查找类外定义的名字。1 查找顺序自定义类MyClass代码如下inti = 1;classMyClass{ public: inti = 2; voidmyFunc() { inti = 3; intj =i; }};其中,在MyClass类的成员函数myFunc()中使用了变量i,而在myFunc()函数、My...
2020-10-24 11:40:16 1295
原创 C++中类中使用定义的类型别名
1 typedef定义类型别名1.1 使用方法在C++中,typedef关键字用来定义类型的别名。typedef intMYINT;此时,MYINT是int的别名,可以将MYINT作为数据类型来定义其他变量。MYINT myint;其中,myint的类型是MYINT 。1.2 注意事项不能使用typedef对类型别名MYINT进行重复定义。typedefintMYINT;typedefdoubleMYINT;此时,编译器报错,报错信息为“ erro...
2020-10-20 10:42:58 1765
原创 C++中类的名字查找
1 类的成员函数定义代码的名字查找C++中编译类代码时,首先编译类的所有声明,只有再编译类的成员函数的定义代码。也就是说,在类的成员函数的代码中,可以使用在其后声明的变量。classMyClass{ intgetValue() { returni; } inti;};在以上代码中,类MyClass的成员函数getValue()虽然定义在成员变量i之前,但是也可以使用该变量。2 类的成员函数声明代码的名字查找在编译成员函数声明的代码时,名字查找是从声明代码处...
2020-10-17 17:10:31 765
原创 C++中在类外部定义的成员函数
类的成员函数可以在类内部定义,也可以在类的外部定义。当定义在类的外部时,需要同时提供类名和函数名。1 类外部定义成员函数代码如下所示classMyClass{ voidmyFunc(); inti;};voidMyClass::myFunc() { i = 1;}此时类MyClass的成员函数myFunc()在MyClass类之外定义。虽然myFunc()函数看上去没有在类的作用域之内,但是由于提供了MyClass类,实际上这时myFunc()就已经在类的作用域之...
2020-10-14 10:22:21 14184
原创 C++中友元的使用4-4
定义友元函数的代码与声明友元的代码没有先后顺序,例如如下代码:classMyClass{ friendvoidf();};voidf() {}和voidf() {}classMyClass{friendvoidf();};以上两段代码等价。需要注意的是,如果在声明友元的类的内部使用该友元函数,必须要在类外部声明该函数,如果函数定义在类内部,此时也需要在类外部对该函数进行声明。classMyClass{ friendvoidf() {};...
2020-10-10 10:35:54 264
原创 C++中友元的使用方法(4-3)
在《C++中友元的使用4-1》中提到,可以将函数声明为类的友元,这个函数就可以访问该类的private成员。我们也可以将类B声明为类A的友元,这样,在类B中就可以访问类A的private成员了。1 将类声明为友元类A的定义如下所示classA{ private: inti{ 1 }; friendclassB;};在A的定义中,将类B声明为友元。类B的定义方式如下所示classB{ public: intgetValue() {...
2020-10-09 12:02:44 344
原创 C++中类的前向声明
在C++中可以只对类进行声明,而不对其进行定义,例如class MyClass;该声明会向程序引入名字MyClass并且指明MyClass是一种类类型。这种对类的声明叫做前向声明。1 使用前向声明1.1 声明指针或引用在声明了类之后,可以定义指向这种类的指针或引用。MyClass* pmc;MyClass& rmc = *pmc;此时,只是说明pmc是一个指针,该指针指向了MyClass,可以不必关心MyClass具体的结构,引用变量rmc的情况也是一样的。1.
2020-09-30 09:46:18 1425
原创 C++类的返回值是*this的成员函数
当C++类的成员函数其返回值是*this时,表示返回值是调用该成员函数的变量的引用。例如classA{public: A& func1() { return*this; }int i{0};}此时,类A的成员函数func1的返回值是*this,该成员函数的返回值类型是A&。1 返回值是左值func1()函数的返回值是类型A的引用,该返回值是左值。也就是说,此时返回的是调用该函数的对象本身,通过该返回值可以调用该对象的其他成员函数或者对其他成员变量...
2020-09-29 10:00:34 1780
原创 C++中的mutabel关键字
mutable关键字一般在C++的类中使用,表示可变数据成员。可变数据成员可以在类的const成员函数中被修改。1 类的const成员函数类的const成员函数不能修改类的成员变量,声明const成员函数的方法是在函数的小括号之后加入const修饰符。classA{ public: inti{ 0 }; voidfunc()const{ }};其中,func是类A的const成员函数。如果在func()函数中修改i的值,voidfunc()c...
2020-09-25 10:47:53 514
原创 C++中类初始值列表与类内初始化
类的构造函数的作用是对其成员进行初始化。而在构造函数中可以使用初始值列表为新创建的对象的成员进行赋值。1 初始值列表在类的构造函数名之后紧跟着冒号,冒号后面是要初始化的成员名,之后是圆括号或者花括号括起来的初始值。这样的结构就是构造函数的初始值列表,如下所示。classA{ public: A() :a(1),b(2){}; inta; intb;};其中,自定义类A具有一个包含了初始值列表的构造函数,使用该构造函数创建对象时,该对象的成员变量a的值...
2020-09-22 12:18:56 5123
原创 C++中类的默认构造函数
在《C++中类的合成的默认构造函数2-1》和《C++中类的合成的默认构造函数2-2》中提到,如果类中没有显式地定义默认构造函数,则C++编译器会为其创造一个合成的默认构造函数,如果类中已经定义了其他格式的构造函数,此时C++编译器不会再为其合成默认构造函数。而定义类时,最好要定义其默认的构造函数。1 使用default关键字定义默认构造函数在C++11中,引入了default关键字来定义默认构造函数。class MyStruct {MyStruct() = default;};在以
2020-09-02 16:57:34 1109
原创 C++中类的合成的默认构造函数2-2
在《C++中类的合成的默认构造函数2-1》中提到,当类没有定义默认构造函数时,C++编译器为该类自动生成一个合成的默认构造函数。当使用合成默认构造函数时,需要注意以下几个事项。1 编译器生成默认构造函数的前提只有当类没有声明任何构造函数时,C++编译器才会自动地生成默认构造函数。也就是说,一旦类定义了其他格式的构造函数,C++编译器不会为其生成默认构造函数。structMyStruct{ inti; MyStruct(inta) { a= i; }};其中...
2020-08-18 11:12:01 314
原创 C++中类的合成默认构造函数2-1
1 构造函数类的构造函数指定了它的对象被初始化的方式,只要类的对象被创建,就会调用该类的构造函数。2 默认构造函数类的默认构造函数是一个特殊的构造函数,控制类成员的默认初始化。默认构造函数无需任何实参。3 合成的默认构造函数3.1 定义如果类没有显式地定义默认构造函数,则编译器会为该类自动创建一个构造函数,由编译器创建的默认构造函数叫做合成的默认构造函数。3.2 初始化的规则有如下自定义类structMyStruct{ inti; intj = 1;...
2020-08-18 11:05:50 334
原创 Kali Linxu中打开Apache服务
Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。1在Kali Linxu中使用默认端口打开Apache服务在Kali Linux2中,使用的是Apache2服务,在Kali Linxu终端中使用service指令打开Apache2服务,如图1所示。图1 打开Apache2服务在其他电脑的浏览器中输入Kali Linux的IP地址,如图2所示,可以看到Apache2服务已经.
2020-08-11 09:55:23 21535
原创 Android Studio中Gradle的Daemon
在通过Android Studio运行项目时,都会有启动Gradle Daemon的构建信息,如图1所示。图1 启动Gradle Daemon1 Gradle Daemon简介Gradle Daemon是Gradle的守护进程,使用守护进程的目的是改善Gradle的启动和执行时间。2 使用Gradle Daemon的好处在Android Studio中使用Gradle Daemon,可以减少没启动Java虚拟机的初始化时间、提供Android Studio程序的构建效率以及缓存.
2020-08-10 11:51:32 1833
原创 C++中友元的使用(4-1)
1 friend介绍friend的中文含义是“友元”,用来在类外部使用该类的private和protected成员。例如,定义MyClass类如下所示classMyClass{ public: MyClass(stringname) { m_name =name; } private: stringm_name;};自定义函数ShowName()的定义为voidShowName(MyClassmy){ cou...
2020-08-07 09:16:35 258
原创 C++中类成员函数的this参数
在C++中,如果某个类的成员函数中使用了该类的成员(成员变量或成员函数),则该成员函数会通过一个名为this的隐式参数来访问这个成员(成员变量或成员函数)。例如,有一个类classmyClass() {public: intm_i; intgetI() { returnm_i; }}其中,成员函数getI()中使用了该类的成员变量m_i,因此getI()函数实际上包含了一个隐藏的参数this,int getI(this){return this-...
2020-08-06 18:04:26 2755
原创 C++中bad_alloc类
当分配内存的请求没有被成功执行时,系统会抛出一个用bad_alloc类来描述出的异常。1 定义bad_alloc类的定义如下所示classbad_alloc: publicexception{ bad_alloc(); virtual~bad_alloc(); bad_alloc(constbad_alloc&); bad_alloc& operator=(constbad_alloc&); constchar*...
2020-08-06 15:52:58 3406
原创 C++中类的常量成员函数
类的常量成员函数(const member function)是类的成员函数,其定义的方式是将const关键字放在成员函数参数列表之后。要说明常量成员函数的用途,首先从类成员的隐式参数this说起。1 this参数1.1 this参数介绍structA{ inta; A(intparam) { a=param; } intgeta() { returna; }};以上代码自定义了类A,该结构包含了自定义的构造函数和geta()成...
2020-08-05 09:25:54 1561
原创 Android Studio安装虚拟机的方法(2-2)
接下来就是下载选中的组件,即指定的SDK,如图5所示。图5 下载组件下载并安装完成后,点击图6的“Finish”按键。图6 安装完成之后,在弹出的图7对话框中,可以设置虚拟机的名字、ID、像素、屏幕显示方式(水平或垂直)、摄像头以及网络等属性。在此,使用默认值即可,点击“Finish”按键。图7 设置虚拟机属性接下来就可以在虚拟设备列表中看到创建的虚拟机了,如图8所示,点击列表“Action”中的三角形按键,如图8所示。图8 启动虚拟机...
2020-08-04 11:48:54 2548 1
原创 Android Studio安装虚拟机的方法(2-1)
在使用Android Studio进行开发,当调试app时需要连接安装了安卓系统的真机,如果没有真机,则可以使用Android Studio的SDK提供的虚拟机进行调试。首先,在Android Studio的工具栏中选择“AVD Manager”按键。其中,AVD是Android Virtual Device的缩写,即安卓虚拟设备。在弹出的窗口中点击“Create Virtual Device”,创建虚拟设备按键,如图1所示。图1 开始创建接下来在弹出的“选择硬件”的对话框中选择要创建.
2020-08-04 11:45:30 9209 1
原创 安装Android Studio的方法(2-2)
在启动Android Studio之后,会弹出“导入配置文件”对话框,此时选择“Do not import settings”即不导入配置文件,如果需要导入配置文件,则选择“Config or install folder”,并且指定配置文件所在的目录,如图7所示。图7 导入配置文件因为此时只安装了Android Studio还没有安装SDK,所以接下来会弹出无法访问SDK的警告对话框,我们可以在程序启动后安装SDK,此时选择“cancel”按键即可,如图8所示。图8 无法访..
2020-08-01 20:01:19 4946 1
原创 安装Android Studio的方法(2-1)
下载好Android Studio安装程序,双击之后,弹出如图1的对话框,点击“Next”按键开始安装。图1 开始安装之后,在选择要安装的组件对话框中,选中“Android Virtual Device”,如图2所示,并按下“Next”按键。图2 要安装的组件接下来,设置Android Studio的安装路径,因为需要占用大量的存储空间,一般不要把Android Studio安装到C盘,如图3所示。图3 设置安装路径接下来在“选择开始菜单文件夹”的...
2020-08-01 19:56:21 1554 1
原创 完全卸载Android Studio的方法
通过三个步骤可以完全卸载Android Studio,这三个步骤是(1)卸载Android Studio (2)卸载Android SDK(3)删除相关文件夹1 卸载Android Studio在控制面板或者360软件管家中卸载Android Studio。本文以360安全管家为例进行示范,首先在360管家的“卸载”界面中选中Android Studio,并且点击“卸载”按键,如图1所示。图1 开始卸载Android Studio之后选中“Android User Setting”.
2020-08-01 11:02:22 27057 1
Windows7下VS2008维护模式破解工具.rar
2019-05-31
基于VS2015套接字完成端口模型源代码
2018-07-04
基于对话框程序的注册码快捷键粘贴功能的实现
2017-04-23
Windows文件系统过滤驱动开发教程(第二版)
2017-04-23
Windows Graphics Programming Win32 Gdi And Directdraw.chm
2017-01-31
DirectDraw中文手册
2017-01-31
VS2008编译驱动程序的配置方法
2016-10-23
ddkwizard_setup_v1.2.0a及ddkward.cmd
2016-10-23
filespy源代码
2016-09-25
黑客调试技术解密pdf
2016-09-20
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人