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