1.派生クラスは、その基本クラスのパブリックメンバーと保護されたメンバーにアクセスできます。
派生クラスオブジェクトには、複数のコンポーネントが含まれています。派生クラスのカスタマイズを含むオブジェクトと、基本クラスから継承されたオブジェクトです。
例:単一継承の例。
//定义基类
class Quote{
public:
Quote() = default;
Quote(const std::string &book,double sales_price):
bookNo(book),price(sales_price){
}
std::string isbn() const{
return bookNo;}
virtual double net_price(std::size_t n) const
{
return n * price;}
virtual ~Quote() = default; //对析构函数进行动态绑定
private:
std::string bookNo; //书籍的 ISBN 编号
protected:
double price = 0.0; //表示普通状态下不打折的价格
};
//定义派生类
class Bulk_quote : public Quote
{
public:
Bulk_quote() = default;
Bulk_quote(const std::string&,double,std::size_t,double);
double net_price(std::size_t) const override;
private:
std::size_t min_qty = 0;
double discount = 0;
};
2.オブジェクトメモリの分散:
- 同じオブジェクト内で、基本クラスから継承された部分と派生クラスのカスタム部分は、必ずしも連続して格納されるとは限りません。
3.間接的な派生
クラスは基本クラスですが、派生クラスにすることもできます。
class Base{
/*...*/};
calss D1 : public Base {
/*...*/};
class D2 : public D1 {
/*...*/};
Baseは、D1の直接基本クラスとD2の間接基本クラスです。直接基本クラスは派生リストに表示されますが、間接基本クラスは直接基本クラスを介して派生クラスに継承されます。