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();
}

 

posted @ 2014-10-29 17:11  Delphi爱好者2014  阅读(600)  评论(0编辑  收藏  举报