VC++之 继承

一.继承的引出

自然界中很多客观事物具有很多共性,比如人与猿之间、火车与汽车之间、大炮与机枪之间,明显地有很多共性,但是它们之间又有很多不同。C++解决 “类似但有不同”问题的方法是——允许类从一个或多个其他类(在这里称为基类)继承其特性和行为,参看下面的例子:

//---------------------------------------------------
class PrintedDocument{
//成员列表
};
//Book类从PrintedDocument类派生出来
class Book: public PrintedDocument{
//成员列表
};
//---------------------------------------------------

 



我们称从其他类继承而来的类为派生类,而一个派生类本身也可以被其他类继承。必须以适当的方式对继承得到的成员进行访问。为了保证基类数据封装的安全,无论以何种继承方式得到的派生类都不能直接访问基类的private区成员。派生类的语法格式为:
    class 类名:<访问权限>基类名列表{类定义体};
基类名列表中各基类用逗号隔开,访问权限可以是public或private,它们表示两种不同的继承方式:以public方式继承得到的成员属性与其基类中的属性相同;以private方式继承得到的成员属性将全部成为private属性。前面提到的protected区成员在使用上与private区成员完全一样,惟一不同只是在派生时,protected 区成员可以被派生类直接访问,即对派生类来说是可见的。例如:

//---------------------------------------------------
class Document{
    public:
    char *Name;
    void PrintNameOf();
};
//---------------------------------------------------
void Document::PrintNameOf(){
    cout<<Name<<"\n";
}
//---------------------------------------------------
class Book:public Document{
    public:
    Book(char *name, long pagecount);
    private:
    long PageCount;
};
//---------------------------------------------------
//Book类的构造函数
Book::Book(char *name, long pagecount){
    Name=new char[strlen(name)+1];
    strcpy(Name, name);
    PageCount=pagecount;
}
//---------------------------------------------------

 

二.类派生引出的成员覆盖问题

在继承中,派生类包含所有的基类成员,同时加入自己的新成员,因此派生类可以根据派生时的成员访问机制访问基类的任何成员(除非这些成员在派生类中重新进行了定义)。当基类的成员在派生类中被重新定义时,可以用作用域操作符“∷”来强制调用基类成员。在上面的例子中,如果在Book中重新定义了PrintNameOf函数,而又要调用基类的PrintNameOf函数,只能通过作用域操作符“∷”强制调用,如下所示:

//---------------------------------------------------
class Book: public Document{
    public:
    Book(char *name, long pagecount);
    private:
    long PageCount;
};
//---------------------------------------------------
void Book:: PrintNameOf(){
    cout<<"Name of book: ";
    Document:: PrintNameOf();
}

 

转载于:https://www.cnblogs.com/delphi2014/p/4060008.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值