您的位置:首页 > 编程语言 > C语言/C++

DLUT c++上机作业(实验五)

2017-04-02 16:47 906 查看
实验5 派生与继承

1、 实验目的和要求

此实验用两个单元的时间完成,是一个综合性的实验,要求编写的程序涉及到C++的许多知识点,如类的定义,动态分配内存,构造函数,派生,虚基类等。实验内容给出的是一个完整的程序,4个题目实际是类等级。同学也可以在此基础上发挥增加新的内容。

2、 实验内容:

1. 定义一个基类MyArray,基类中可以存放一组数组。

编写构造函数,析构函数及其它函数,实现动态分配内存,释放内存和数据输入输出等功能。并进行调试。

2.定义一个类averarray继承自myarray,在类中求数组的平均值,并输出。进行调试。

3.定义一个类revarray继承自 myarray, 使数组按反序存放,并输出。进行调试。

4. 定义一个类Nawarray继承自averarray和revarray。在继承过程中声明为虚基类,体会虚基类在解决二义性中的问题中的作用。调试中可以试一试不用虚基类出现的问题。

前四个归为一题。

#include<iostream>
using namespace std;

class myarray
{
int *alist;
int length;
public:
myarray(int leng);
~myarray();
int getlen();
int *getlist();
void input();
void display();
};
class avearray :virtual public myarray{
double ave;
public:
avearray(int length) :myarray(length){}
void display(){
int *p = getlist();
ave = 0;
for (int i = 0; i < getlen(); i++)ave += *(p + i);
ave /= getlen();
cout << ave << endl;
}
};
class revarray :virtual public myarray{
public:
revarray(int len) :myarray(len){};
void display_and_rev();
};
class nawarray :public avearray, public revarray{
public:
nawarray(int len) :myarray(len), avearray(len), revarray(len){}
};
void revarray::display_and_rev(){
int *temp = new int[getlen()];
int *p = getlist();
for (int i = getlen() - 1; i >= 0; i--){
*(temp + getlen() - i - 1) = *(p + i);
}
for (int i = 0; i < getlen();i++){
*(p + i) = *(temp + i);
}
for (int i = 0; i < getlen(); i++)cout << *(p + i) << " ";
cout << endl;
}
int myarray::getlen(){
return length;
}
int* myarray::getlist(){
return alist;
}
myarray::myarray(int leng){
length = leng;
if (leng>0)
alist = new int[leng];
}
myarray::~myarray()
{
if (length>0)
delete[]alist;
else cout << "mistake" << endl;
alist = NULL;
}
void myarray::input(){
for (int i = 0; i < length; i++)cin >> *(alist + i);
}
void myarray:: display(){
for (int i = 0; i < length; i++)cout << *(alist + i) << " ";
cout << endl;
}
int main(){

avearray ave(5);
ave.input();
ave.myarray::display();
ave.display();

revarray reve(5);
reve.input();
reve.display_and_rev();

nawarray naw(5);
naw.input();
naw.myarray::display();
naw.display();
naw.display_and_rev();
}


编写一个程序,实现字符串操作:

一个简单串类string,包含输入字符串、返回字符串长度及内容等功能;

另有一个具有编辑功能的串类edit_string,它继承string类,在其中设置一个光标,使其能支持在光标处的插入、替换和删除等编辑功能。

#include<iostream>
#include<string.h>
using namespace std;
class String{
char *str;
public:
char*getstr();
void input();
void show();
int getlen();
String();
};
char* String::getstr(){
return str;
}
void String::input(){
cin>>str;
}
void String::show(){
cout<<str<<endl;
}
String::String(){
str=new char[100];
}
int String::getlen(){
return strlen(str);
}
class edit:public String{
public:
void insert(int x,String p);
void remove(int x);
void replace(int x,char c);
};
void edit::insert(int x,String p){
char *s=getstr();//1
char *temp=p.getstr();//2
int slen=strlen(s);
int plen=strlen(p.getstr());
for(int i=slen+plen-1;i>=x+plen;i--){
*(s+i)=*(s+i-plen);
}
for(int i=x;i<x+plen;i++){
*(s+i)=*(temp+i-x);
}
*(s+slen+plen)='\0';

}

void edit::remove(int x)
4000
{
char *temp=getstr();
for(int i=x;*(temp+i)!='\0';i++){
*(temp+i)=*(temp+i+1);
}
}
void edit::replace(int x,char c){
char *temp=getstr();
*(temp+x)=c;
}
int main(){

edit s;
s.input();
s.show();

String str;
str.input();

s.insert(1,str);
s.show();

char c;cin>>c;
s.replace(1,c);
s.show();

s.remove(2);
s.show();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  作业