一、类
-
类的声明:
class 类名
{
[public:]
[数据成员声明]
[函数成员声明]
[private:]
[数据成员声明]
[函数成员声明]
[protected:]
[数据成员声明]
[函数成员声明]
} -
类函数成员的实现
类声明体内直接实现
类体外,使用域预算符(::) 如 short Cperson::Getage(){} -
类的数据成员需要初始化,但不能在类的声明中初始化。在类的构造函数中进行初始化,或使用构造函数初始化列表
-
复制构造函数:保留对象副本,用于以后恢复对象的状态,复制构造函数的参数时一个已经初始化的类对象
-
Cperson(Cperson & copyperson)
-
析构函数:一个类只能定义一个析构函数;析构函数不能重载,析构函数不能使用return语句,不能加void关键字
-
类成员的访问属性:public,对外可见,对内可见;private(默认),对外不可见,对内可见;protected,对外不可见,对内可见,对派生类可见
-
嵌套类,在另一个类的定义内部定义的类;外围类不能访问嵌套类的私有成员(友元类除外),只允许在外围的类域中使用,在其他的类域或作用域中不可见。
-
局部类:在函数中定义的类,在函数外不能访问的
-
友元:使用friend关键字,可以让特定的函数或别的类的所有成员函数对私有数据成员进行访问。
-
友元类:当用户希望另一个类能够访问当前类的私有成员时,可以在当前类中将另一个类作为自己的友元类,这样在另一个类中九可以访问当前类的私有成员了
-
友元方法:控制另一个类的函数对当前类的私有成员的访问。使用域符号 friend class::函数
-
命名空间 :一个命名的范围区域,程序员在这个特定的范围内创建的所有标识符都是唯一的
-
namespace 命名空间名
-
{ 常量,比那辆,函数等对象的定义}
-
引用命名空间成员
使用作用域限定符“::” 命名空间::成员
使用using namespace 命名空间名, 直接引用成员即可 -
继承与派生
-
类继承的形式
-
class 派生类名标识符:[继承方式] 基类标识符
-
{
-
[访问控制修饰符]
-
成员声明列表
-
}
-
继承方式:
-
public :在公有继承中,基类的公有(public)和保护(protected)成员在派生类中仍然是公有和保护成员,但基类的私有(private)成员在派生类中是不可访问的
-
protected :在保护继承中,基类的公有和保护成员在派生类中变为保护成员,而基类的私有成员在派生类中仍然是不可访问的
-
private:在私有继承中,基类的所有成员(无论是公有、保护还是私有)在派生类中都是私有的。这意味着派生类不能直接访问这些成员,但可以通过在派生类中定义公有或保护成员函数来间接访问它们
-
构造函数的访问
-
构造函数,先调用父类的构造函数,再调用子类的构造函数,释放时,先调用当前类的析构函数,再调用父类的析构函数
-
子类显示调用父类构造函数:创建子类时,默认调用父类默认构造函数,若要调用带参数构造函数,需要显示调用
-
子类隐藏父类成员函数:在子类定义一个和父类一样的成员函数
-
重载运算符
-
operator 类型名()
-
{}
-
重载运算符时不能改变运算符的操作数的个数,原有的优先级,结合性,语法结构。不能重载的运算符(. .* :: ? :)
-
多重继承
-
允许从多个父类继承公有和受保护的成员,基类标识符之间用“,”分隔
-
派生类在调用函数时,先在自身的作用域内寻找,找不到再到基类中寻找。
-
多重继承的构造函数的顺序:以类派生表中声明的顺序为准。
-
多态
-
不同功能的函数可以用同一个函数名,这样就可以用一个函数名调用不同内容的函数,发出同样的消息被不同类型的对象接收时,导致完全不同的行为。
-
函数重载和虚函数
-
虚函数:在基类中使用关键字virtual声明函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。
-
虚函数的作用:允许在派生类中重新定义与基类同名的函数,并可以通过基类指针或引用来访问基类和派生类中的同名函数。
-
纯虚函数:可以不用在基类中定义,只需要在基类中声明。纯虚函数所在的基类不能产生对象,只能产生指针,虚函数的对象可以产生对象
class 类名
{
virtual 类型 函数名 (参数列表)=0;
} -
纯虚函数没有函数体
-
最后面的“=0”并不表示函数的返回值为0,只是形式上的作用,告诉编译系统“这是纯虚函数”。
-
这是一个声明语句,最后应有分号
-
纯虚函数只有函数名而不具备函数功能,不能被调用,只是通知编译系统“在这里声明一个虚函数,留待派生类中定义”,在派生类中对此函数定义后,才能具备函数功能,可被调用
-
纯虚函数的作用是在基类中为其派生类保留一个函数的名称,以便派生类根据需要对它进行定义,以实现多态。若在派生类中没对纯虚函数定义,则该纯虚函数在派生类中仍然为纯虚函数
-
虚函数表:编译器为每个对象提供了一个虚表指针,这个指针指向了对象所属类的虚表,在程序运行时,根据对象的类型去初始化虚拟指针,从而让虚拟指针正确的指向了所属类的虚表,在调用虚函数的时候才能正确找到正确的函数。