1、 类
1) 类与对象
2) 构造函数、析构函数、默认构造函数、复制构造函数(或拷贝构造函数)
构造函数是与类同名的特殊成员函数,主要用来初始化对象的数据成员
默认构造函数是指不需要显式提供参数的构造函数,主要用来初始化对象的默认值
复制构造函数是在等号赋值时或者实参传入形参时被调用
析构函数是与类同名的另一种特殊成员函数,作用与构造函数相反,用于在对象生存期结束时完成对象的清理工作
3) Private、protected、public成员变量和成员函数访问权限
Private:只能让类内部访问的数据成员和成员函数
Protected:让类内部和派生类内部访问的数据成员和成员函数
Public:让类外部可以访问的数据成员和成员函数
4) 友元函数、友元类
友元函数是一种特殊的普通函数,它可以直接访问类内部的私有成员,在类声明时加上friend关键词,在类外实现时不能加friend关键词。
友元类:一个类可以是另一个类的友元,友元类的所有成员函数都是另一个类的友元函数,能够直接访问另一个类的所有成员
5) 静态数据成员、静态成员函数
静态数据成员是属于类的,整个类只有一份备份,相当于类的全局变量,能够被该类的所有对象共用。类的静态数据成员必须在类外定义。
在类成员函数的原型前面加上static就是将它定义为静态成员函数,静态成员函数属于整个类,它只能访问该类的静态成员,不能访问非静态成员
6) this指针
this是用于标识一个对象自引用的隐式指针,代表对象自身的地址
7) 类的作用域和对象的生存期
8) 对象数组和对象指针
指向类成员函数的指针2、 继承
类继承关系的语法形式
class 派生类名 : 基类名表
{
数据成员和成员函数声明
};
1) private、protected、public继承:
公有继承 基类的公有成员→派生类的公有成员
基类的保护成员→派生类的保护成员
私有继承 基类的公有成员和保护成员→派生类的私有成员
保护继承 基类的公有成员和保护成员→派生类的保护成员
不论种方式继承基类,派生类都不能直接使用基类的私有成员
2) 基类和派生类的关系:
has-A 包含关系,用以描述一个类由多个“部件类”构成。实现has-A关系
用类成员表示,即一个类中的数据成员是另一种已经定义的类。
is-A 机制称为“继承”。关系具有传递性,不具有对称性。
3) 覆盖和隐藏基类成员变量或成员函数:
⏹ 基类的成员变量或函数被覆盖:如果派生类覆盖了基类中的成员函数或成员变量,则当派生类的对象调用该函数或变量时是调用的派生类中的版本,当用基类对象调用该函数或变
量时是调用的基类中的版本。
⏹ 隐藏基类成员函数的情况:如果在派生类中定义了一个与基类同名的函数,不管这个函数的参数列表是不是与基类中的函数相同,则这个同名的函数就会把基类中的所有这个同名的函数的所有重载版本都隐藏了,这时并不是在派生类中重载基类的同名成员函数,而是隐藏。
⏹ 怎样使用派生类的对象访问基类中被派生类覆盖或隐藏了的函数或变量:显示声明
类名::成员
4) 基类的初始化:
⏹ 建立一个类层次后,通常创建某个派生类的对象,包括隐含使用基类的数据和函数
⏹ 构造函数不被继承。C++提供一种机制,在创建派生类对象时调用基类的构造函数来初始化基类数据
⏹ 派生类构造函数声明为
派生类构造函数 ( 变元表 ) : 基类 ( 变元表 ) , 对象成员1( 变元表 )
… 对象成员n ( 变元表 ) ;
⏹ 构造函数执行顺序:基类→对象成员→派生类
5) 多继承:
一个类有多个直接基类的继承关系称为多继承
多继承声明语法:
class 派生类名 : 访问控制 基类名1 , 访问控制 基类名2 , … , 访问控制 基类名n
{
数据成员和成员函数声明
};
6) 多继承的构造与访问:
⏹ 多个基类的派生类构造函数用初始式调用基类构造函数,执行顺序与单继承构造函数情况类似。多个直接基类构造函数执行顺序取决于定义派生类时指定的各个继承基类的顺序。
⏹ 一个派生类对象拥有多个直接或间接基类的成员。不同名成员访问不会出现二义性。如果不同的基类有同名成员,派生类对象访问时应该加以识别。
7) 虚基类:
在多继承中,要使这个公共基类在派生类中只产生一个子对象,必须将这个基类声明为虚基类。虚基类声明使用关键字 virtual
虚拟继承:C++提供虚继承机制,防止类继承关系中成员访问的二义性。
3、 多态性
1) 虚函数
⏹ 为什么要使用虚函数:使用虚函数就实现了一个接口多种方法。
⏹ 注意不能把成员变量声明为虚有的,也就是说virtual关见字不能用在成员变量前面。
⏹ 使用基类指针或引用来调用虚函数.
⏹ 如果基类含有虚函数则当声明了一个基类的指针时,当基类指针指向不同的派生类时,它就会调用相应派生类中定义的虚函数版本.
⏹ 虚函数须在基类中用virtual 关键字声明也可以在基类中定义虚函数,并在一个或多个子类中重新定义.重定义虚函数时不需再使用virtual关键字,当然也可以继续标明virtual关键字,以便程序更好理解。
⏹ 包括虚函数的类被称为多态类.C++使用虚函数支持多态性.
⏹ 在派生类中重定义虚函数时,虚函数必须有与基类虚函数的声明完全相同的参数类型和数量,这和重载是不同的。
⏹ 虚函数不能是声明它的类的友元函数,必须是声明它的类的成员函数
⏹ 一旦将函数声明为虚函数,则不管它通过多少层继承,它都是虚函数
⏹ 隐藏虚函数:如果基类定义了一个虚函数,但派生类中却定义了一个虚函数的重载板本,
则派生类的这个版本就会
⏹ 把基类的虚函数隐藏掉,当使用基类指针调用该函数时只能调用基类的虚函数,而不能调用派生类的重载版本,当用派生类的对象调用基类的虚函数时就会出现错误了,因为基类的虚函数被派生类的重载版本隐藏了。
⏹ 带默认形参的虚函数:当基类的虚函数带有默认形参时,则派生类中对基类虚函数的重定义也必须有相同数量的形参,但形参可以有默认值也可以没有,如果派生类中的形参数量和基类中的不一样多,则是对基类的虚函数的重载。
⏹ 对虚函数的重定义也就意味着,当用指向派生类的基类指针调用该虚函数时就会调用基类中的虚函数版本。
⏹ 析构函数可以是虚函数,但构造函数不能.
2) 抽象类
⏹ 纯虚函数声明形式为virtual 类型函数名(参数列表)=0;注意后面的等于0;
⏹ 如果类至少有一个纯虚函数,则这个类就是抽象的。
⏹ 如果基类只是声明虚函数而不定义虚函数则此虚函数是纯虚函数.任何派生类都必须实现纯虚函数的自已的版本.如果不实现纯虚函数那么该类也是抽象类。
⏹ 抽象类不能有对象,抽象类只能用作其它类的基类。
⏹ 可以用抽象类声明一个指针或引用,这个指针或引用指向派生类对象.
4、 模板
1) 类模板
2) 函数模板
3) 容器
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论