第一章C++ 基础endl 换行并刷新输出流setw(n) 设置字段位数为nhex,oct,dec 十六进制,八进制,十进制表示setfill 定义填充字符setprecision 定义浮点数的精度left,right 左对齐,右对齐showpoint 强制显示小数点以及全部尾部0C++通过给常量命名的方式定义常量:const<数据类型名><常量名>=<表达式>用const定义的标识符常量时,一定要对其初始化。
在说明时进行初始化是对这种常量置值的唯一方法,不能用赋值运算符对这种常量进行赋值。
函数声明的一般形式为函数类型函数名(参数表)函数模板的定义template<typename 或class T>函数定义例子:template<typename T>T max(T a,T b){return(a>b)? a:b;}定义函数模板时可以使用多个类型参数,每个类型参数前面只需加上关键字typename或class,用逗号分隔:template <class T1, class T2, class T3>例子:template<class T1, class T2>T1 max(T1 a,T2 b){return (a>b) ? a : (T1)b;}有默认参数的函数:实参与形参的结合是从左至右进行的,因此指定默认值的参数必须放在形参列表中的最右端引用定义对变量起另外一个名字(别名alias),这个名字称为该变量的引用。
<类型> &<引用变量名> = <原变量名>;其中原变量名必须是一个已定义过的变量。
如:int max ;int &refmax=max;refmax并没有重新在内存中开辟单元,只是引用max的单元。
max与refmax在内存中占用同一地址,即同一地址两个名字。
对引用类型的变量,说明以下几点:1、引用在定义的时候要初始化2、对引用的操作就是对被引用的变量的操作。
3、引用类型变量的初始化值不能是一个常数。
4、一旦引用被声明,它就不能再指向其它的变量。
5、对引用的初始化,可以用一个变量名,也可以用另一个引用。
6、引用同变量一样有地址,可以对其地址进行操作,即将其地址赋给一指针。
当&m的前面有类型符时(如int &m),它必然是对引用的声明;如果前面无类型符(如cout<<&m),则是取变量的地址。
7、对常量(用const声明)的引用使用如下方式:int i=5;const int &a=i;内联函数定义的一般格式为:inline <函数值类型> <函数名>(<参数表>){<函数体>}作用域运算符::a表示全局作用域中的变量a。
注意:不能用::访问函数中的局部变量new运算从堆中分配一块与<类型>相适应的大小为<元素个数>的数组存储空间,若分配成功,将这块存储空间的起始地址存入<指针变量名>,否则置<指针变量名>的值为NULL(空指针值,即0)。
new的使用格式为:<指针变量名>=new <类型>[<元素个数>];delete运算符用来释放<指针变量名>指向的动态存储空间。
使用格式如下:delete <指针变量名> 或delete[] <指针变量名>第2章面向对象基本概念面向过程编程与面向对象编程的区别:面向过程编程先确定算法,再确定数据结构;面向对象编程先确定数据结构,再确定运算。
类定义:class <类名>{<访问控制符>:<成员函数的声明><访问控制符>:<数据成员的声明>};<成员函数的实现>若在类体外实现,则需要使用作用域运算符“::”,用它来标识某个成员函数是属于哪个类的,其定义格式如下:<函数值类型> <类名>::<成员函数名>(<参数表>){<函数体>}类外访问对象中的成员可以有3种方法:通过对象名和成员运算符访问对象中的成员。
<对象名>.<公有成员>通过指向对象的指针变量访问对象中的成员。
<对象指针名> -> <公有成员>通过对象的引用访问对象中的成员。
析构函数其定义格式如下:<类名>::~<类名>(){<函数体>}在一般情况下,调用构造函数与声明对象的顺序相同,而调用析构函数的次序正好与创建对象的顺序相反。
三种构造函数Box(); //无参构造函数Box(int h,int w ,int len):height(h),width(w),length(len){}//带参构造函数复制构造函数定义<类名>(<参数表>);<类名>(const <类名>& <对象名>)Box(const Box& b);//复制构造函数复制构造函数只有一个参数,并且是对同类对象的引用。
静态成员是类的所有对象共享的成员,而不是某个对象的成员,它在对象中不占存储空间,是属于整个类的成员。
静态成员定义格式如下:static<静态成员的定义>;不能用参数初始化表对静态数据成员初始化,也不能在构造函数体内初始化,静态数据成员只能在类体外进行初始化。
静态数据成员初始化格式如下:<数据类型> <类名>::<静态数据成员名>=<值>;在类的成员函数中可以直接访问该类的静态数据成员,而不必使用成员访问运算符或类名限定修饰符。
在类外必须使用成员访问运算符或类名限定修饰符访问公共静态数据成员。
<对象名>.<静态成员><类名>::<静态成员>静态成员函数就是使用static关键字声明的成员函数。
静态成员函数可以直接访问该类的静态成员,但不能直接访问类中的非静态成员。
第3章详解对象对象指针就是用于存放对象数据起始地址的变量。
声明对象指针的一般格式为:<类名> *<对象指针名>;对象指针的初始化一般格式为:<数据类型> *<对象指针名>=&<对象名>;<对象指针名>=&<对象名>;通过指针访问对象成员一般格式如下:<对象指针名> -> <公有成员>boxp->volumn();(*<对象指针名>).<公有成员>(*boxp).volumn();this指针是一个特殊的隐含指针,它隐含于每一个成员函数(静态成员函数除外)中,也就是说,每个成员函数都有一个this指针参数。
this指针指向调用该函数的对象,即this指针的值是当前被调用的成员函数所在的对象的起始地址。
复制构造函数中隐含使用this指针:TAdd(const TAdd& p){this->x=p.x; this->y=p.y;cout<<"copy constructor."<<endl;}同样也可以使用*this来标识调用该成员函数的当前对象。
x this->x (*this).xthis指针是一个const指针,成员函数不能对其进行赋值。
静态成员中不能访问this指针,因为静态成员函数不从属于任何对象。
指向非静态数据成员的指针一般形式为:数据类型名*指针变量名;定义指向公有成员函数的指针变量的一般形式为:数据类型名(类名:: *指针变量名)(参数列表);使指针变量指向一个公有成员函数的一般形式为:指针变量名=&类名::成员函数名常量定义格式如下:const <数据类型名> <常量名>=<表达式>;常对象是其数据成员值在对象的整个生存期间内不能被改变的对象。
const <类名><对象名>(<初始化值>);<类名> const <对象名>(<初始化值>);常成员函数通过常成员函数来引用本类中的常数据成员。
<数据类型><函数名>(<参数表>)const;声明一维对象数组的一般格式为:<类名> <数组名>[<下标表达式>]第4章运算符重载重载为类的成员函数格式如下:<类名> operator <运算符>(<参数表>){ 函数体}A operator + (A &);++为前置运算符时,它的运算符重载函数的一般格式为:<type> operator ++( )++为后置运算符时,它的运算符重载函数的一般格式为:<type> operator ++(int)运算符重载函数不能定义为静态的成员函数,因为静态的成员函数中没有this 指针。
友元声明以关键字friend开始,只能出现在被访问类的定义中。
具体格式如下:friend <函数值类型> <函数名>(<参数表>);friend class <类名>;友元函数可以访问该类中的所有成员(公有的、私有的和保护的)通常使用友元函数来取对象中的数据成员值,而不修改对象中的成员值,保证数据安全。
重载为类的友元函数语法形式friend <函数值类型> operator <运算符>(<参数表>){ <函数体>;}++为前置运算符时,它的运算符重载函数的一般格式为:A operator ++(A &a)++为后置运算符时,它的运算符重载函数的一般格式为:A operator ++(A &a, int)重载提取运算符的一般格式为:friend istream & operater >>(istream &, ClassName &); istream & operater >>(istream &is, ClassName &f){…}重载输出(插入)运算符的一般格式为:friend ostream & operater >>(ostream &, ClassName &); ostream & operater >>(ostream &is, ClassName &f){…} 重载类型转换运算符函数格式:operator〈返回基本类型名〉(){……return 〈基本类型值〉}类类型转换函数只能是成员函数,不能是友元函数。