- 1、本文档共48页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C_第11讲-1虚函数表和虚函数表指针
C++面向对象程序设计
彭刚
为什么使用继承
派生类
派生类的构造函数和解析函数
虚函数
多继承
第11讲 虚函数表和虚函数表指针
0.为什么使用继承
现实世界中许多实体之间并不是孤立的,它们具有共同特
征,也有细微的差别,人们可以使用层次结构来描述它们
之间的相似点和不同点。
引入继承的目的在于为代码重用提供有效手段:
一方面使用继承可以重用先前项目的代码,如果原来的代
码不能完全满足要求,还可以做少量的修改,满足不断变
化的具体应用要求,
另一方面,继承为重用代码而存在的理由已经越来越薄弱
了,而的存在很大程度上是作为“多态”的基础。
9.1 派生类
——从已有类中派生新的类
B类继承A类,或称从类A派生类B
类A称为基类(父类),类B称为派生类(子类)
class 派生类名:访问控制 基类名
{
数据成员和成员函数声明
};
– 访问控制表示派生类对某个基类的继承方式,使用关
键字:
public 公有继承
private 私有继承 可缺省声明
protected 保护继承
公有派生
派生类对基类的公有继承使用关键字
public 描述
基类的公有段和保护段成员访问权对派生
类保持不变
私有派生
派生类对基类的私有继承使用关键字 private 描述(可缺
省)
基类的所有公有段和保护段成员都成为派生类的私有成
员,这些私有成员只能被派生类的成员函数访问,而派生
类的使用者无权访问
如果希望基类中某些公有成员在派生类中也是公有的,使
得派生类的使用者能够访问它,则可在派生类的公有段说
明这些成员,并在成员名前缀上“类名::”
保护派生
派生类对基类的保护继承使用关键字 protected 描述
基类的所有公有段和保护段成员都成为派生类的保护成员
保护继承在程序中很少应用
派生类的特性
1. 新的派生类可在基类所提供的基础上包含
新的成员;
2. 在新的派生类中可隐藏基类的任何函数
成员;
3. 可为新的类重载定义函数;
4. 派生类不能访问基类私有成员;
5. 派生类可以访问基类保护成员;
#include iostream.h
#include string.h
class employee{
private:
short age;
float salary;
char *name;
public:
employee( ) { name=; age=0; salary=0.0; }
employee(char *name1, short age1, float salary1)
{
name=new char[strlen(name1)+1];
strcpy(name,name1);
age=age1;
salary=salary1;
}
void print( ) const
{
coutname:nameendl;
coutage:ageendl;
coutsalary:salaryendl;
}
~employee( ) { if(name!=) delete [] name; }
};
Manager:
为避免重复定义,可从employee中派生出manager(派生类)。
派生类继承原有类
中所有的数据成员
和成员函数。
class manager: public employee
{ };
void main()
{
manager m;
m.print( );
//m.salary=2700.; //error
}
派生类 基类
使employee中所有公
有成员在manager中仍
为公有
class manager: public employee {
private:
int level;
public:
void print_level(int i=0)
{
level=i;
coutlevel:levelendl;
}
};
m.print_level();
Manager:除具有employee的属性外,有新的属性。
构造函数
析构函数
print
Print_level
name
age
salary
level
函数
函数
函数
派生类新增部分
基类定义部分
公有方法 私有成员
派生类构造函数:使用初始化符表初始化基类中的成员。
manager::manager(char *name1, short age1, float salary1,
int level1) : employee(name1, age1, salary1)
{
level=level1;
}
缺省构造函数——若基类无缺
省构造函数,将出错
manager::manager( )
{
level=0;
}
manager m(“wang”, 31, 2457.2f, 19);
pro
您可能关注的文档
- ASME-AS Comparison.pdf
- ASC_RFDIP1608060LNT_V01.pdf
- Assessing long term backache after childbirth.pdf
- ASSESSING PROFESSIONAL GROWTH OF PRE-SERVICE TEACHERS USING COMPARISON BETWEEN THEORETICAL.pdf
- Assessing the Efficiency of Stream Reuse Techniques in Peer-to-Peer Video-on-Demand Systems.pdf
- Assessing the landscape and ecological quality of urban green spaces in a compact city.pdf
- Assessment of Building Damage Induced by Three-Dimensional Ground Movements.pdf
- AstaREAL, natural astaxanthin, to combat low=功效.pdf
- Assessment of Retained Austenite in AISI D2 Tool SteelUsing Magnetic Hysteresis and Barkhausen Noise.pdf
- Astronomical Research with liquid mirror telescopes.pdf
文档评论(0)