代码改变世界

c++第四次作业

2019-10-13 22:41  艾伦爱尔敏  阅读(154)  评论(0编辑  收藏  举报

继承与派生

       类的继承,是新的类从已有类那里得到已有的特性。也就是说从已有类产生新类的过程就是类的派生。类的继承与派生机制允许程序员在保持原有类特性的基础上,进行更具体、更详细的修改和扩充。原有的类成为基类或是父类,产生的新类称为派生类或是子类。派生类同样可以作为基类再次派生出新的类,这样就形成了类的层次结构。通过这种方式减少程序员负担并且增加代码的重用。

派生类的定义:

 

1 class 派生类名:继承方式  基类名1,继承方式 基类名2,...,继承方式 基类名n
2 {
3     派生类成员声明;
4 }

 

      一个派生类,可以有多个基类,这种情况称为多继承;一个派生类只有一个直接基类的情况,称为单继承。

      在派生过程中,派生出来的新类也同样可以作为基类再继续派生新的类,此外,一个基类可以同时派生出多个类。也就是说,一个类从它的父类继承来的特征也可以被其他的类所继承。一个父类的特征可以被多个子类所继承。这样,就形成了一个相互关联的类的家族,也成为类族。就如同人类社会中的家族关系,可以有很多代子孙,并且一个父亲可以有很多儿子。在类族中,直接参与派生出某类的基类称为直接基类,基类的基类甚至更高层次的基类称为间接基类。也可用人类社会进行类比:直接基类也就是父子关系,而其余则是间接基类。

 1 class Account
 2 {
 3 private:
 4     std::string id;
 5     double balance;
 6     static double total;
 7 protected:
 8     Account(const Data &date, const std::string &id);
 9     void record(const Data &data, double amount, const std::string &desc);
10     void error(const std::string &msg) const;
11 public:
12     const std::string &getId() const {return id;}
13     double getBalance() const{return balance;}
14     static double getTotal(){return total;}
15     void show() const;
16 };
17 class CreditAccount : public Account
18 {
19 private:
20     Accumulator acc;
21     double credit;
22     double rate;
23     double fee;
24     double getDebt() const;
25 public:
26     CreditAccount{const Data &data, const std::string &id, double credit, double rate, double fee};
27     double getCredit() const;
28     double getRate() const;
29     double getAvailaleCredit();
30     void deposite(const Data &data, double amount, const std::string &desc);
31     void withdraw(const Date &date, double amount, const std::string &desc);
32 void settle(const Date &date);
33 void show() const;
34 };

派生类的生成分为以下三步:

1.吸收基类成员

      在类的继承中第一步是将基类的成员全盘接收,这样,派生类就包含了它的全部基类中除构造和析构函数之外的所有成员。在派生过程中构造函数和析构函数都不被继承。

2.改造基类成员

      对基类成员的改造分为两个方面,一个是基类成员访问控制的问题,主要依靠派生类定义时的继承方式来控制。另一个是对i类数据或函数成员的覆盖和隐藏,隐藏就是简单的在派生类中声明一个和基类数据或函数同名的成名。

3.添加新的成员

       派生类新成员的加入使继承和派生的核心,是保证派生类在功能行有所发展的关键。可根据实际情况的需要,为派生类增加新的数据成员和函数。