- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第七章 继承性的
面向对象程序设计 第二版;7.1 继承的好处 ; 下面让我们通过一个具体例子来感受一下使用继承机制的必要:
class String
{
private:
char *contents; //说明了一个字符串首地址的指针
int length; //字符串长度
public:
String()
{
length = 0;
}
int get_length()
{
return length;
}
char *get_contents()
{
return contents;
}
void set_contents(int in_length,char *in_contents);
void set_contents(char *in_contents);
}; ; 可以利用C ++语言提供的继承机制,从String类派生出新的派生类EditString,增加了移动光标,在光标处编辑的处理功能:
class EditString : public String //派生类EditString的定义
{
private:
int cursor;
public:
EditString(int offset = 0){ cursor = offset; }
int get_cursor(){ return cursor; }
void move_cursor(int offset); // 把光标移到指定位置
void add(String *text); // 在光标后添加一个字符串
void replace(String *text); // 把光标后内容换成新字符串
void del(int how_much); // 删除光标后指定个数的字符
};;下面是使用String类和EditString类的一个主函数:
void main()
{
String s1; //声明基类String的对象s1
EditString s2; //声明派生类EditString的对象s2
char *p;
s1.set_contents(11,″Hello, world″);
p = s1.get_contents();
s2.set_contents(11, p);
s2.move_cursor(6);
s2.replace(“Students”);
} ;为了软件复用,必须具有:
抽象机制
将一组相似模块中的共性内容抽象出来,作为基类的内容向外部世界共享。
继承机制
无需修改原有程序模块的代码就可以重用原有的程序资源并对其功能进行扩充。;7.2 C++定义派生类的语法 7.2.1 定义派生类的语法 ;7.2.2 访问权修饰符 ;三条规律:
⑴派生类成员函数不能直接访问基类的私有成员。
派生类继承了基类的私有成员,在创建派生类对象时,先为基类中说明的数据成员(包括私有数据成员)分配内存,然后才为派生类中说明的数据成员分配内存,所有上述成员都属于这个新创建的对象。
如果在子类中需要使用从父类继承来的父类私有成员,必须通过父类公有(或保护)的成员函数访问。
;⑵ 访问权修饰符只能使继承来的成员的可访问性受到更严格限制,而不能放松这种限制。
⑶ 在继承机制下信息隐藏的最好方法,是在基类中使用访问权符protected。
在基类中使用访问权符protected声明的成员,可由派生类的成员函数直接访问,在派生类之外,任何函数是不能直接访问的。通常把被派生类继承后需较频繁使用的基类数据成员的访问属性规定为protected。
;使用访问权修饰符时的注意事项:
要区分访问权修饰符与访问权符的概念,在定义派生类时,派生类通过访问权修饰符从基类获得一定权限,进行公有派生、保护派生或私有派生,例如:class B:public A{};,这时语句中的public即为访问权修饰符;而当一个类定义过程中,有些数据成员被封装在公有部分,有些数据成员被封装在私有部分,而这时使用的public、protected及private即为访问权符。
如果访问权修饰符为public,则派生类中方法和数据成员的访问权限不变(同基类),但如果访问权修饰符为protected或private,则派生类中的方法和数据成员的访问权限变小,具体请参见表7.1父类成员在子类中的访问属性加以理解。; 在实际开发过程中,允许其他
文档评论(0)