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。在继承过程中声明为虚基类,体会虚基类在解决二义性中的问题中的作用。调试中可以试一试不用虚基类出现的问题。
前四个归为一题。
编写一个程序,实现字符串操作:
一个简单串类string,包含输入字符串、返回字符串长度及内容等功能;
另有一个具有编辑功能的串类edit_string,它继承string类,在其中设置一个光标,使其能支持在光标处的插入、替换和删除等编辑功能。
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(); }
相关文章推荐