C++
文章平均质量分 72
xuxianmei
这个作者很懒,什么都没留下…
展开
-
27、C++类模板的友元
C++类模板的友元类模板的友元是指将某些函数或类声明为该类模板的友元,这样这些指定函数和某个类的所有函数都可以通过类模板的对象访问其私有成员和保护成员。出现在类模板中的友元可以分为3种:1、非模板的友元类和友元函数(普通的类和函数)2、与模板类型不绑定的友元类模板和友元函数模板(模板实参不一定需要一致时)3、与模板参数绑定的友元类模板和友元函数模板注:对于第一种情况,不原创 2013-04-28 10:19:34 · 922 阅读 · 0 评论 -
6、C++指针数组的使用
本文件的指针数组的使用同样适用于C语言 char *str=new char[10]; char *Strs[3]={"AC","DG","XZ"}; cout<<(int)*(Strs+1)<<endl;//指向DG字符串的指针变量的地址。 cout<<(int)*(Strs+1)+1<<endl;//指向DG字符G的的指针的首地址。 cout原创 2013-04-29 11:40:20 · 684 阅读 · 0 评论 -
29、C++文件流操作
文件流操作所谓文件,一般指存在外部介质上的数据的集合。根据数据组织形式,C++将其分为文本文件和二进制文件。文本文件又称ASCII文件,它的每个字节存放一个ASCII码。代表一个字符,在内存和外设上的文件流传输需要经过类型转换,将内存中的值转换为对应的ASCII码,再存放到外设中。二进制文件,则是把内存中的数据,按其在内存中的存储形式原样写到磁盘上存放,不作任何转换。原创 2013-04-30 11:25:31 · 1634 阅读 · 0 评论 -
9、C++程序中内存区域划分
在C++中程序在将内存分为5个区:常量存储区、静态存储区、自由自由存储区、栈、堆。1.栈:由编译器在需要的时候自动分配,在离开作用区域后自动释放的变量的存储区。存储的通常是局部变量、函数参数等。2.堆:通过new配的内存块,这些内存的释放由程序员控制,一般一个new就要对应一个delete.如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。3.自由存储区:由mal原创 2013-04-29 11:39:48 · 811 阅读 · 0 评论 -
30、C++ string类
C++ string类之所以抛弃char *的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。首先,为了在我们的程序中使用string类型,原创 2013-04-30 11:50:37 · 1419 阅读 · 0 评论 -
10、C++在堆上分配内存
在堆上分配内存基本语法1:类型标识符 *指针变量名 =new 类型标识符(初值);也可以为一个指针分配一个数组大小内存,并将首地址赋值给指针变量。语法2:类型标识符 *指针变量名=new 类型标识符[size] ; 注:不可在分配的时候进行初始化。内存的主动释放:delete 指针名; //释放语法1分配的内存delete []指针名; //释放语法2分配的内存原创 2013-04-28 10:25:44 · 1118 阅读 · 0 评论 -
12、C++函数默认实参、函数指针
#include using namespace std;//参数默认值,必须从右向左赋值,而且每个形参只能设置一次默认值。int getMax(int a,int b=20){ return (a>b)?a:b;}inline int getMax(int =10,int );int main(){ //带有默认实参的函数在调用时,可不给该参数传实参 //原创 2013-04-28 10:25:25 · 845 阅读 · 0 评论 -
23、C++多态(虚函数 纯虚函数 抽象类 )
C++中多态一、多态有狭义和广义之说狭义上:为对象的类型变化,行为随之变化广义上:程序中的标识符(对象,宏 函数 模板)的不同。有静态多态和动态多态。这里主要讨论的主要是动态多态。静态多态:预处理时期和编译时期的多态,主要通过函数重载、模板、宏定义来表现。动态多态:运行时时期的多态。随着程序的运行,不同的对象,行为也会改变。因为C++是一种强类型语言,变量一旦声明,其类原创 2013-04-28 10:21:20 · 1069 阅读 · 0 评论 -
3、C++中函数返回引用
C++中函数返回引用1)什么是引用? 引用就是变量的别名,操作一个变量的引用也就相当于操作变量本身,这一点跟指针很类似。(2)C++函数为什么要使用引用?C语言之中大量利用指针作为形参或者函数返回值,这是由于值拷贝会有很大的消耗(比如传入传出一个大的结构体)。所以在C++之中使用引用作为函数参数和返回值的目的和使用指针是一样的。而且形式上更加直观,所以C++提倡使用引用。(原创 2013-04-27 20:45:09 · 4420 阅读 · 0 评论 -
28、C++类模板的特化
C++类模板的特化有的时候某些类型不能直接用来实例化类模板,或者说直接实例化不能满足需要,此时就要针对这种类型进行特化,包括特化(即全特化)和偏特化。1、特化为绝对类型目的:为了针对特殊的类型进行特殊处理,重新修改成新的逻辑,定义一个新的特化的类模板。特点:template后没有形参说明,类模板名加了模板实参列表。基本语法:templateclass 类模板名原创 2013-04-29 11:50:49 · 1005 阅读 · 0 评论 -
26、C++类模板
C++类模板目的:当同一种逻辑操作需要面对不同的数据类型时,如果不使用模板,就需要定义针对不同数据类型的类,这样容易造成代码冗余和管理复杂。当采用了类模板时,就可以定义一个逻辑模板,用相同的程序处理不同的数据类型,当需要处理指定数据类型时,只要用该类型声明一个类模板实例。就使用进行相应的操作。注:类模板的定义与实现要放在同一个文件中一、类模板普通类模板定义:原创 2013-04-28 10:19:56 · 738 阅读 · 0 评论 -
21、C++类的继承
C++中类的继承继承是面向对象程序设计的一个重要特征,它允许在已有的基础上创建新的类,新类可以从一个或多个已有类中继承函数和数据,而且可以重新定义或加进新的数据和函数,从而形成类的层次或等级。其中已有类称为基类或父类,在它基础上建立的新类称为派生类或子类。一、继承方式以及类中的访问修饰符1、类中的访问修饰符:指定了类外对象和子类访问类内成员的权限。public :类原创 2013-04-28 10:22:42 · 794 阅读 · 0 评论 -
17、C++运算符的重载
C++运算符的重载重载运算符类似重载函数,同一个操作符不同类型的参数,有不同的操作。一般用两种函数实现:类的成员函数、友元函数,全局函数也可以实现,不过一般的全局函数不能访问类的私有成员,如果将其声明为公有的,就破坏了数据的封装性。一、重载运算符的规则:1、只可重载C++自带的已有的运算符,不允许定义新的运算符。2、部分运算符不可以进行重载。下面是不可重载的运算符:原创 2013-04-28 10:23:57 · 694 阅读 · 0 评论 -
8、C++的转义字符意义
测试程序:#include using namespace std;// 转义字符的使用。int main(){ // "a" 字符串="a\0" 'a'字符='a' //\r是回车符,回到本行的行首。 \b 退格键 \ddd 最多三个数字,代表相应的八进制。d代表0-7 // \xdd 十六进制。dd代表0-9 a-f, // \t原创 2013-04-29 11:39:59 · 1380 阅读 · 0 评论 -
7、C++模板函数
函数模板一、函数模板的定义基本语法:template 返回类型 函数模板名(函数参数列表){ 函数体 }注:1、模板参数列表不可为空,可以是一个或多个类型参数(如:typename T1,typename T2),也可以是非类型参数(如: int size),这种非类型参数当作常量使用,而且在实参化时,需要用一个常量表达式(或常量)赋值。2、非类型参数,原创 2013-04-29 11:40:10 · 1342 阅读 · 0 评论 -
16、C++中常对象以及常成员
C++中的常对象、常引用、类中的常成员常对象(同理常引用):常对象的数据成员值在对象的整个生存期内不能改变,而且在定义对象时必须进行初始化。声明基本语法:const修饰类名 const 对象名(参数列表);或者const 类名 对象名(参数列表);常数据成员:const修饰,只能通过构造函数的初始列表对该数据成员进行初始化,而其他任何函数都不能对该成员赋值。且值不可原创 2013-04-28 10:24:12 · 836 阅读 · 0 评论 -
13、C++类基本知识
类的基本知识一、类的定义基本语法:class 类名{类体。};类内总共有两种成员,数据成员,成员函数。二、类的成员的访问修饰符(public private protected)每个类的成员均有访问修饰符,默认是private.基本语法:访问修饰符:成员定义或者单独对每个成员加上一个访问修饰符。以下只讨论类内和对象对成员的访问,不介绍友元和原创 2013-04-28 10:24:58 · 701 阅读 · 0 评论 -
11、C++const指针 引用
指针、Const、引用一、常量指针与指针常量:1、常量指针:指向的变量不可以通过指针修改语法:const 类型标识符 * 指针变量名2、指针常量:不能修改指针的值(指针的指向)语法: 类型标识符 * const 指针变量名 二、引用引用也是一种数据类型。定义一个引用需要立即初始化,不可独立存在,且一旦初始化就不可再改变为其他变量的引用。基本语法:类型标识原创 2013-04-28 10:25:36 · 1066 阅读 · 0 评论 -
5、C++的静态变量和静态函数
1)可以定义静态变量 1.1)定义类内或struct内的静态成员变量时,这个变量则属于类,类的实例(也就是对象)共享这个成员 1.2)普通的变量用static修饰的话,是静态变量。存在静态存贮区。静态变量的生命期是整个应用程序的生命期,即程序结束时静态变量才释放。退出内存。静态变量的作用域是局部变量。在其有效范围内可访问。静态局部变量在函数结束时不释放,但其它函数不原创 2013-04-27 20:48:57 · 679 阅读 · 0 评论 -
4、C++ 实现文件复制(类实现)
//代码测试 运行环境vc++2010#include #include #include using namespace std;class ClsCopyfile{public : ClsCopyfile(char * sfile="",char * dfile=""); ifstream & funGetInFile(); ofstream & funGe原创 2013-04-27 20:47:37 · 988 阅读 · 0 评论 -
14、C++复制构造函数和赋值构造函数的代码实例
C++复制构造函数和赋值构造函数的代码实例默认编译器都会自动加上一个,一般都是用常对象作为参数。测试程序:class CComplex{ private: double real; double imag; public: CComplex(double r,double i);//构造函数 CComplex(const CComplex原创 2013-04-28 10:24:39 · 684 阅读 · 0 评论 -
15、C++类的友元
C++中的友元作用:使用友元可以使非成员函数通过形参对象,直接访问对象或者引用的私有成员,而不需要通过调用公有函数去访问。友元函数:在该类中声明时以friend修饰,可以是一个普通函数,也可以是一个其它类的成员函数。定义可以放在类内,或者其它位置。友元函数可以访问类的私有成员,但是它并不是成员函数,所以不能直接访问对象的数据成员,也不能通过this指针访问对象的数据成员,,原创 2013-04-28 10:24:28 · 659 阅读 · 0 评论 -
24、C++多态之虚函数
C++多态之虚函数因为C++是一种强类型语言,变量一旦声明,其类型是不会改变的,所以在C++中实现多态不能直接用对象,而是用指向对象的指针或引用,并且对象的类型在定义时也有一定要求。具有动态特征的实体是对象。二、动态多态实现方式:1、将与多态行为相关的函数,在基类中声明为虚函数2、派生类改写基类的虚函数3、通过基类型的指针(或者引用),调用虚函数注:实现动态多态原创 2013-04-28 10:21:04 · 514 阅读 · 0 评论 -
25、C++纯虚函数与抽象类
C++纯虚函数与抽象类//注:基类的指针和引用,如果指向派生类对象,那么只关心派生类从基类继承过来的成员和函数。对派生类中新加的成员忽略。测试程序:#include using namespace std;class Base{ public: int b_data; public: Base(int bd):b_data(b原创 2013-04-28 10:20:56 · 663 阅读 · 0 评论 -
1、C++关于拷贝构造函数和赋值运算符重载问题的测试程序。因为调用顺序不清,导致内存泄漏new delete
#include #include using namespace std;class ClsComplex{private: int m_nReal; int m_nImag; char *m_p_chStr;public : ClsComplex(int real=0,int imag=0,char *str=" "); //复制构造函数重载原创 2013-04-27 19:34:23 · 1168 阅读 · 0 评论 -
18、C++运算符重载之++ -- [ ]
C++运算符重载之++ -- [ ]++ -- 可以使用成员函数,也可以使用友元函数来进行重载,而且还有前后缀之分。[ ] 只能使用成员函数来进行重载,而且C++规定只能有一个参数,而且必须有一个。测试实例:#include using namespace std;class CComplex{ private: double real原创 2013-04-28 10:23:40 · 712 阅读 · 0 评论 -
19、C++运算符重载之自定义类型转换
C++运算符重载之自定义类型转换类型转换有隐式转换和显示转换。一、隐式转换:某些不同类型的数据之间自动转换。如:int x=10;double y=3.5+x;x会自动转换成double类型,再与3.5相加。隐式类型转换主要遵循以下原则:1、在赋值表达式A=B的情况下,赋值右值B类型需要转换为左值A类型后,进行赋值。2、当char或short类型变量与int原创 2013-04-28 10:23:17 · 3751 阅读 · 0 评论 -
20、C++运算符重载之输入输出运算符的重载
C++运算符重载之输入输出运算符的重载系统对于自定义类型的输入输出,采用重载后的运算符 >来实现。1、重载插入运算符(也称输出运算符) 一般格式:ostream & operator {outreturn out;}2、重载提取运算符(也称输入运算符) >>一般格式:但是返回类型不一定为这个类型。istream & operator >>(i原创 2013-04-28 10:23:03 · 4601 阅读 · 0 评论 -
22、C++中的虚继承以及虚基类
C++中虚继承一、引入虚基类的原因:如果有一个类有多个直接基类,而这些直接基类又有一个共同的基类,则最低层的派生类会保留这个间接的共同基类数据成员的多份同名成员,在访问这些同名的成员时,必须在派生类对象名后增加直接基类名,使其惟一标识一个成员,以免产生二义性。为了摆脱这种加直接基类名,引入了虚基类。作用:虚继承基类,无论有多少个派生类虚拟继承这个基类,都只是给了每一个原创 2013-04-28 10:21:38 · 726 阅读 · 0 评论 -
2、C++ 实现文件复制(非类实现)
#include #include #include using namespace std;int main(){ char buff[4096];//设置缓冲区 //创建一个输入流对象 ifstream in_file("site.tar",ios::binary);//两个流对象同时采用二进制方式 //拷贝文件名可自行修改 if(!in_file)原创 2013-04-27 20:43:23 · 802 阅读 · 0 评论