return0;
}
4.类的定义_深拷贝
描述:
设计并实现一个动态整型数组类Vect,要求:
(1)实现构造函数重载,可以根据指定的元素个数动态创建初始值为0的整型数组,或根据指定的内置整型数组动态创建整型数组。
(2)设计拷贝构造函数和析构函数,注意使用深拷贝。
(3)设计存取指定位置的数组元素的公有成员函数,并进行下标越界,若越界则输出“outofboundary”。
(4)设计获取数组元素个数的公有成员函数。
(5)设计用于输出数组元素的公有成员函数,元素之间以空格分隔,最后以换行符结束.
在main函数中按以下顺序操作:
(1)根据内置的静态整型数组{1,2,3,4,5}构造数组对象v1,根据输入的整型数构造数组对象v2。
(2)调用Vect的成员函数依次输出v1和v2的所有元素。
(3)输入指定的下标及对应的整型数,设置数组对象v1的指定元素。
(4)根据数组对象v1拷贝构造数组对象v3。
(5)调用Vect的成员函数依次输出v1和v3的所有元素。
输入:
用于构建数组对象v2的元素个数用于设置数组对象v1的指定下标及元素值
输出:
数组对象v1和v2的所有元素数组对象v1和v3的所有元素
输入样例:
10
66
输出样例:
12345
0000000000
outofboundary
12345
12345
#include
usingnamespacestd;
classVect
{
public:
Vect(intn=0);
Vect(intarr[],intn);
Vect(constVect&v);
~Vect();
intSize(){returnarrSize;}
intGetData(inti)
{
if(i<0||i>=arrSize)
{
cout<<"outofboundary"<}
ElsereturnarrData[i];
}
voidSetData(inti,intval)
{
if(i<0||i>=arrSize)
{
cout<<"outofboundary"<}
elsearrData[i]=val;
}
voidPrintData()
{
if(arrSize>0)cout<for(inti=1;i{
cout<<""<}
cout<}
private:
intarrSize;
int*arrData;
};
Vect:
:
Vect(intn):
arrSize(n)
{
arrData=newint[arrSize];
for(inti=0;i{
arrData[i]=0;
}
}
Vect:
:
Vect(intarr[],intn):
arrSize(n)
{
arrData=newint[arrSize];
for(inti=0;i{
arrData[i]=arr[i];
}
}
Vect:
:
Vect(constVect&v):
arrSize(v.arrSize)
{
arrData=newint[arrSize];
for(inti=0;i{
arrData[i]=v.arrData[i];
}
}
Vect:
:
~Vect()
{
if(arrData)
{
delete[]arrData;
arrSize=0;
}
}
intmain()
{
intarr[]={1,2,3,4,5};
intn,i,data;
cin>>n>>i>>data;;
Vectv1(arr,5),v2(n);
v1.PrintData();
v2.PrintData();
v1.SetData(i,data);
Vectv3(v1);
v1.PrintData();
v3.PrintData();
return0;
}
5.虚基类
描述:
(1)定义人员类Person:
公有成员:
姓名(Name);
保护成员:
性别(Gender),年龄(Age);
构造函数和析构函数
(2)从人员类Person派生学生记录类StudentRecord:
添加公有成员:
学号(Number),班级(ClassName),
添加静态公有成员:
学生总人数(TotalCount);
添加保护成员:
平均成绩(Score);
实现构造函数和析构函数。
(3)从人员类Person派生教师记录类TeacherRecord:
添加公有成员:
学院(CollegeName),系(DepartmentName);
添加保护成员:
教龄(Year);
实现构造函数和析构函数。
(4)从学生记录类StudentRecord和教师记录类TeacherRecord派生学生助教类TeachingAssistant:
添加公有成员:
辅导课程(LectureName);
实现公有函数:
显示人员信息(Show),屏幕打印姓名,性别,年龄,学号,班级,学生总人数,平均成绩,学院,系,教龄,辅导课程。
实现构造函数和析构函数。
为检验类间结构设计是否正确,设计函数voidSetName(Stringname)实现更改一名助教的姓名的功能。
创建一个助教类的对象
助教
姓名性别年龄学号班级平均成绩学院系教龄辅导课程
郑七男222010123软2010189信息软件1数据结构
显示其信息。
调用更改姓名的函数,更改其姓名为“郑八”,并再次显示其信息。
输出样例:
Person郑七constructed
Student郑七constructed
teacher郑七constructed
teachingassistant郑七constructed
Name:
郑七Gender:
男Age:
22Number:
2010123ClassName:
软20101TotalCount:
1Score:
8
9CollegeName:
信息DepartmentName:
软件Year:
1LectureName:
数据结构
Name:
郑八Gender:
男Age:
22Number:
2010123ClassName:
软20101TotalCount:
1Score:
8
9CollegeName:
信息DepartmentName:
软件Year:
1LectureName:
数据结构
teachingassistant郑八destructed
teacher郑八destructed
Student郑八destructed
Person郑八destructed
提示:
各类的构造函数和析构函数都有输出。
调用公有函数Show,以分别显示各个记录的人员信息。
在派生助教类时,使用虚基类。
#include
#include
usingnamespacestd;
classPerson
{
protected:
stringGender;
intAge;
public:
stringName;
Person(stringgender,intage,stringname)
{
Gender=gender;
Age=age;
//Name=newchar[strlen(name)+1];
//strcpy(Name,name);
Name=name;
cout<<"Person"<}
~Person()
{
cout<<"Person"<//delete[]Name;
//delete[]Gender;
}
/*voidShow()
{
cout<<"Name:
"<"<"<}*/
};
classStudentRecord:
virtualpublicPerson
{
protected:
intScore;
public:
stringNumber;
stringClassName;
staticintTotalCount;
StudentRecord(stringnumber,stringclassname,intscore,stringgender,intage,stringname):
Person(gender,age,name)
{
//Number=newchar[strlen(number)+1];
//strcpy