• 面向对象实验四类的继承


    一、实验目的 

    通过以一个类为基类来为其建立派生类的方法,掌握面向对象程序设计中类的继承性、层次性等特性以及派生类中给基类构造函数传递参数的方法,掌握基类中不同访问权限的成员在派生类中的访问权限。 继承是C++语言的一种重要机制,该机制自动地为一个类提供来自另一个类的操作和数据结构,这使得程序员只需在新类中定义已有类中没有的成分来建立类。理解继承是理解面向对象程序设计所有方面的关键。 能利用现有的类建立新类,能理解继承如何提高软件的可重用性,理解多态性对于继承的意义,掌握多态的工作原理。 派生类(子类)继承它父类的属性和操作,在继承中,基类的 private 对所有的外界都屏蔽(包括自己的派生类),基类的protected控制符对应用程序是屏蔽的,但对其派生类是可访问的。

    存取方式与继承关系

    存取方式

    public

    protected

    private

    public

    public

    protected

    private

    protected

    protected

    protected

    private

    private

    private

    private

    private

    二、实验内容 

      使用 Visual C++ 6.0 建立一个类A,然后派生出两个类B和C。

    三、实验要求 

       1、要求类A的公有段、保护段、私有段分别都有对应的数据和成员函数;

       2、分别以public和private的方式派生出两个类B、C;

       3、通过B和C的构造函数传递参数给基类A的构造函数,验证它们之间的调用关系和调用顺序;

       4、在这两个派生类中实现对基类成员的访问,在基类的基础上增加新的成员函数;

       5、编制主程序验证派生类的正确性。

    四、实验课后要求 

     1、整理课内上机的结果、体会;

    2、完成实验报告。 

    实验代码:

    //shuiguo.h

    #ifndef SHUIGUO_H_

    #define SHUIGUO_H_

    class shuiguo//基类,水果

    {

    private:

    int sum;//总数

    int kind;//种类数量

    public:

    shuiguo():sum(0),kind(0){}

    shuiguo(int s, int k) :sum(s), kind(k){}

    virtual void display();

    void change(int,int);

    };

    class banana:public shuiguo//香蕉,具有has-a关系的公有继承

    {

    private:

    float cal;//卡路里

    public:

    banana() :shuiguo(), cal(0.0){}

    banana(int s, int k, float c) :shuiguo(s, k), cal(c){}

    virtual void display();

    };

    class maochong :private shuiguo//毛毛虫,具有is-a关系的私有继承

    {

    private:

    int number;//毛虫数量

    public:

    maochong() :shuiguo(), number(0){}

    maochong(int s, int k, int n) :shuiguo(s, k), number(n){}

    virtual void display();

    };

    #endif

    //shuiguo.cpp

    #include

    #include"shuiguo.h"

    using namespace std;

    void shuiguo::display()

    {

    cout << "总数: " << sum << "   " << "种类:  " << kind << endl;

    }

    void shuiguo::change(int a,int b)

    {

    sum = a;

    kind = b;

    }

    void banana::display()

    {

    shuiguo::display();

    cout << "卡路里:  " << cal << endl;

    }

    void maochong::display()

    {

    shuiguo::display();

    cout << "总数;  " << number << endl;

    }

    //user.cpp

    #include"shuiguo.h"

    #include

    using namespace std;

    int main()

    {

    //一般对象实现

    shuiguo a;

    a.display();

    a.change(100,10);

    a.display();

    shuiguo b(200, 20);

    b.display();

    banana c;

    c.display();

    c.change(100, 10);

    c.display();

    banana d(200, 20, 3);

    d.display();

    maochong e;

    e.display();

    maochong f(100, 10, 100);

    f.display();

    //指针对象实现(简化版)

    shuiguo *g;

    g= new shuiguo[1];

    g[0]=shuiguo(100,10);

    g[0].display();

    banana *l;

    l = new banana[1];

    l[0] = banana(200, 20, 3);

    l[0].display();

    maochong *k;

    k = new maochong[1];

    k[0] = maochong(100, 10, 100);

    k[0].display();

    return 0;

    }

  • 相关阅读:
    Java内存模型
    小菜鸟河北联通上岗培训随笔
    面试突击:MySQL 中如何去重?
    对于回归方程和线性回归方程的个人理解
    一百六十九、Hadoop——Hadoop退出NameNode安全模式与查看磁盘空间详情(踩坑,附截图)
    多线程(基础) - 4万字总结
    mac idea 常用快捷键
    Semantic Kernel 入门系列:📅 Planner 规划器
    C#(四十)之stringBuilder类
    郑州市管城区工信局局长任华民一行莅临中创算力调研指导工作
  • 原文地址:https://blog.csdn.net/night__wind/article/details/127911909