第1关:父类和子类
任务描述
编写一个父类,名为 List
。再编写 2 个子类,分别是 ArrayList
和 LinkedList
,公有继承 List
。 其中 List
类只有一个数据成员,size
,并且是 protected
的。 ArrayList
本身拥有 2
个数据成员,分别是 data
和 capacity
(请参考实训作业10);LinkedList
本身拥有 1
个数据成员,为 head
,且须提供一个内部结构体(请参考实训作业11)。 为了方便测试,在 List
类中为 size
提供 get
和 set
函数。子类中无需提供任何函数。
本实验一共需要完成三份代码
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
。其函数原型为:
void f(const List&list);
且 List
和 ArrayList
与 LinkedList
构成派生关系,如同第一关。
//请在该文件中完成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 个构造函数,其一是拷贝构造函数,另一个以1
个 int
作为参数,其作用是初始化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******/