Educator:程序设计二(面向对象)_C++实训12_公有继承

第1关:父类和子类


任务描述

编写一个父类,名为 List。再编写 2 个子类,分别是 ArrayListLinkedList,公有继承 List。 其中 List 类只有一个数据成员,size,并且是 protected 的。 ArrayList 本身拥有 2 个数据成员,分别是 datacapacity(请参考实训作业10);LinkedList 本身拥有 1 个数据成员,为 head,且须提供一个内部结构体(请参考实训作业11)。 为了方便测试,在 List 类中为 size 提供 getset 函数。子类中无需提供任何函数。

本实验一共需要完成三份代码

list.h如下:

#ifndef _LIST_H_
#define _LIST_H_
 
class List{
protected:
    //注意size是protected,这样子类就可以操作这个成员
    int size;
 
public:
    //请实现成员size的存取函数
    void setSize(int v)
    {
        size=v;
    }
 
    int getSize()
    {
        return size;
    }
};
 
#endif // _LIST_H_

LinkedList如下:

#ifndef _LINKEDLIST_H_
#define _LINKEDLIST_H_
#include"List.h"
//请在下面定义LinkedList类
//LinkedList类公有继承List类,且拥有一个内部结构体Node,以及一个数据成员head
class LinkedList:public List
{
    public:
    void setSize(int v)
    {
        size=v;
    }
 
    int getSize()
    {
        return size;
    }
};
 
#endif // _LINKEDLIST_H_

ArrayList如下:

#ifndef _ARRAYLIST_H_
#define _ARRAYLIST_H_
#include"List.h"
//请在下面定义ArrayList类
//ArrayList类公有继承List类,且额外拥有2个数据成员:data和capacity
class ArrayList:public List
{
    public:
    void setSize(int v)
    {
        size=v;
    }
 
    int getSize()
    {
        return size;
    }
};
#endif // _ARRAYLIST_H_

第2关:子类的对象可以作为父类类型使用


任务描述

编写一个函数,以 List 的常引用为形参,输出该参数的 size。其函数原型为:

  1. void f(const List&list);

ListArrayListLinkedList 构成派生关系,如同第一关。

//请在该文件中完成f函数
/******begin your code here******/
#include"List.h"
#include"ArrayList.h"
#include"LinkedList.h"
#include<iostream>
using namespace std;
void f(const List&list)
{
    cout<<list.getSize()<<endl;
}
/******end your code********/

第3关:利用父类的构造函数实现子类的构造函数

任务描述

使用 List 类的构造函数,实现其 2 个子类的构造函数。 List 类已提供 2 个构造函数,其一是拷贝构造函数,另一个以1int 作为参数,其作用是初始化size的值;同时 int 形参的默认值是 0。 ArrayList类和 LinkedList 类均提供 4 个构造函数,请参考实训作业10实训作业11

/******begin your code here******/
#include"ArrayList.h"
#include"List.h"
 
ArrayList:: ArrayList()//初始化
{
    size=0;
}
 
ArrayList:: ArrayList(const ArrayList&rhs)
{
    size=rhs.getSize();
}
 
ArrayList::ArrayList(int const a[],int n)
{
    size=n;
}
 
ArrayList::ArrayList(int n,int value)
{
    size=n;
}
ArrayList::~ArrayList()
{
}
 
/******end your code******/

/******begin your code here******/
#include"LinkedList.h"
LinkedList::LinkedList()
{
    size=0;
}
LinkedList::LinkedList(const LinkedList&rhs)
{
    size=rhs.getSize();
}
 
LinkedList::LinkedList(int const a[],int n)
{
    size=n;
}
LinkedList::LinkedList(int n,int value)
{
    size=n;
}
LinkedList::~LinkedList()
{
 
}
 
/******end your code******/

  • 15
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值