C++面向对象-4


继承和派生

新类拥有原有类的全部属性为继承!原有类产生新类的过程为派生。

原有类称为基类,产生的新类称为派生类。
http://www.dotcpp.com/course/cpp/200027.html

继承方式(派生权限)

  • 公有继承
  • 私有继承
  • 保护继承

公有继承

  • 基类中的公有成员,在派生类中仍然为公有成员。无论派生类的成员函数还是成员对象都可以访问。
  • 基类中的私有成员,无论在派生类的成员还是派生类对象都不可以访问。
  • 基类中的保护成员,在派生类中仍然是保护类型,可以通过派生类的成员函数访问,但派生类对象不可以访问!

私有继承

  • 基类中的公有和受保护类型,被派生类私有吸收后,都变为派生类的私有类型,即在类的成员函数里可以访问,不能在类外访问。
  • 基类的私有成员,在派生类类内和类外都不可以访问。

保护继承

  • 基类的公共成员和保护类型成员在派生类中为保护成员。
  • 基类的私有成员在派生类中不能被直接访问。
#include<iostream>
using namespace std;

class Student                   //基类 
{
    private:
        int number;
    public:
        int Set(int number)
        {
            this->number=number;
            return 0;
        }
        int Show()
        {
            cout<<"he or she number:"<<number<<endl;
        }
};

class Score:public Student      //公有继承,派生类 
{
    private:
        int score;
    public:
        int set_score(int score)
        {
            this->score=score;
            return 0;
        }
        int show_score()
        {
            cout<<"the score is :"<<score<<endl;
            return 0;
        }    
};

int main()
{
    Score A;
    A.Set(17007101);
    A.Show();
    A.set_score(99);
    A.show_score();
    return 0;
}

多继承

一个子类可以有多个父类,继承多个父类的特性
class <派生类名>:<继承方式><基类名1>,<继承方式><基类名2>,…{派生类类体}

#include<iostream>
using namespace std;

class  Shape
{
    public:
        void setWidth(int w)
        {
            width = w;
        }
        void setHight(int h)
        {
            height = h;
        }
    protected:
        int width;
        int height;
};

class PaintCost 
{
    public:
        int GetCost(int area)
        {
            return area*70;
        } 
};

class Rectangle: public Shape,public PaintCost   //派生类 
{
    public:
        int getArea()
        {
            return (width*height); 
        }
};

int main()
{
    Rectangle Rect;
    int area;

    Rect.setWidth(10);
    Rect.setHight(3);

    area = Rect.getArea();

    //输出对象面积
    cout<<"Total area: "<<Rect.getArea()<<endl;

    //输出总花费
    cout<<"Total paint cost: "<<Rect.GetCost(area)<<endl;

    return 0; 


}


文章作者: ShanSan
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 ShanSan !
  目录