15.常对象(常对象中的数据成员为常变量且必须要有初值)
数据成员的值不能被修改
不能调用常对象的非const型的成员函数
Time const t1(12,34,46);
常数据成员 const int hour;
只能透过构造函的参数初始化表对常数据成员进行初始化
常成员函数 void get_time() const;
常成员函数,只能引用本类中的数据成员,而不能修改它们。
数据成员 非const成员函数 const成员函数
非const的数据成员 引用+改值 引用
Const数据成员 引用 引用
Const对象的数据成员 引用
已定义一个常对象,只能调用其中的const成员函数,而不能调用非const成员函数
常对象中的成员函数未加const声明,编译系统把它作为非const成员函数处理
常成员函数不能调用另一个非const成员函数
对象的常引用(实参传值可以改变值)
Time const t1; //常对象
void Time::fun() const //fun是Time类中的常成员函数
Time * const p; //p是指向Time对象的常指针
const Time *p; //p是指向Time类常对象的指针
Time &t1=t; //t1是Time类对象t的引用
16.对象的赋值
对象名1=对象名2;(属于同一个类)
对象的复制
类名 对象2(对象1);or 类名 对象名1=对象名2;
17.友元(一个类的友元函数可以访问这个类中的私有成员)
class Time
{public:
Time(int,int,int);
friend void display(Time &); //声明display函数为Time类的友元函数
private:
int hour;
int minute;
int sec;
};
友元的关系是单向的而不是双向的
友元的关系不能传递
在A类的定义体中用以下声明
friend B;
18.类模板
template<class numtype>
class Compare
{public:
Compare(numtype a ,numtype b)
{x=a;y=b;}
numtype max()
{return (x>y)?x:y;}
numtype min()
{return (x<y)?x:y;}
private:
numtype x,y;
};
使用时 Compare <int> cmpl(4,7);
19.运算符重载
双目算术运算符 +(加)-(减)*(乘)/(除)%(取模)
关系运算符: ==(等于) !=(不等于) <(小于) >(大于) <=(小于等于) >=(大于等于)
逻辑运算符: ||(逻辑或) &&(逻辑与) !(逻辑非)
单目运算符: +(正) -(负) *(指针) &(取地址)
自增自减: ++(自增) --(自减)
位运算符: |(按位或) &(按位与) ~(按位取反) ^(按位异或) <<(左移) >>(右移)
赋值运算符: = += -+ *= /= %= &= |= ^= <<= >>=
空间申请与释放 new delete new[] delete[]
其他运算符: ()(函数调用),->(成员访问) ->*(成员指针访问) ,(逗号) [](下标)
20.继承与派生
继承:一个新类从已有的类那里获得其已有特性
派生:从已有的类(父类)产生一个新的子类
派生类是基类的具体化,基类是派生类的抽象
class 派生类名: [继承方式] 基类名
{ 派生类新增加的成员
} ;
继承方式: public private protected
基类成员 public private protected
私有成员 no no no
公有成员 yes private protected
保护成员 protected private protected
21.虚基类(避免二义性,排除同名的出现)
class A
{........};
class B : virtual public A
//声明B是A的公用派生类,A是B的虚基类
22.虚函数
23.纯虚函数
24.输入输出流
25.命名空间