C++ DLUT 上机作业(二)
我又来了,第二次的。。。
学生类析构
/设计描述某一班级的学生类,私有数据成员包括学号和姓名int id; char name, 静态成员 char classNo[10]; 公有成员函数实现以下功能:
1)定义构造函数,实现对数据成员的初始化,学生对象的默认名字是“ssdut”,默认的班号为“软2016”
2)定义析构函数,验证不同对象何时被析构;
3)重载成员函数set, 完成对各种数据成员的设置
4)显示学生相关信息的成员函数show(), 按清晰格式输出学生的所有信息
请给出类声明与定义,并对其在main()中进行测试,提交源代码(在答案框粘贴代码),附件:Stu+姓名.cpp)以及运行截图。*/
#include<iostream>
#include<cstring>
using namespace std;
class Student{
private:
int id;
char *name;
static char classNo[10];
public:
Student();
Student(int num,char *n);
~Student()
{
cout<<"姓名为"<<name<<"的学生被析构"<<endl;
}
void set(int num,char *n);
void set(char *cla);
void show();
};
char Student::classNo[10]="软2006";
Student::Student()
{
id=0;
name=new char[6];
strcpy(name,"ssdut");
}
Student::Student(int num, char* n ) {
id = num;
name = new char[strlen(n) + 1];
strcpy(name, n);
}
void Student::set(int num,char *n)
{
id=num;
name=new char[strlen(n)+1];
strcpy(name,n);
}
void Student::set(char *m)
{
strcpy(classNo,m);
}
void Student::show()
{
cout<<"姓名:"<<name<<" 学号:"<<id<<" 班级:"<<classNo<<endl;
}
int main()
{
int i;
char name[10],cla[10];
Student s1,s2,s3;
cout<<"输入学生1信息(学号,姓名,班级):"<<endl;
cin>>i>>name>>cla;
s1.set(i,name);
s1.set(cla);
cout<<"输入学生2信息(学号,姓名,班级):"<<endl;
cin>>i>>name>>cla;
s2.set(i,name);
s2.set(cla);
cout<<"输出学生信息:"<<endl;
s1.show();
s2.show();
cout<<"默认学生信息:"<<endl;
s3.show();
}
学生日期组合
/利用已定义的日期类Date, 设计学生类Student,
私有数据成员包括学号和姓名int id; char name[20];
表示入学日期时间对象Date roll;
以及统计学生对象数目的静态成员number。
公有成员函数实现以下功能:
1)定义默认构造函数与有参构造函数,实现对所有数据成员的初始化,默认学生对象的名字是“ssdut”,默认入学日期为2020年9月8日,默认的学号为2020001(入学年份与number的组合) ,每创建一个对象则number与学号自增1,例如2020002。
2)重载设置入学日期的成员函数 void set(const Date&); bool set(int y, int m, int d);
3)获取已有学生数目的静态成员函数 geNum();
4)显示学生相关信息的show(), 按清晰格式输出学生的所有信息
请给出完整的类定义,并在main()中进行测试。/
#include<iostream>
#include<cstring>
using namespace std;
class Date{
private:
int year;
int month;
int day;
public:
Date();
Date(int y,int m,int d);
void set(const Date&);
bool set();
int gety(){return year;}
int getm(){return month;}
int getd(){return day;}
};
Date::Date()
{
year=2020;
month=9;
day=8;
}
Date::Date(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
void Date::set(const Date& d)
{
year=d.year;
month=d.month;
day=d.day;
}
bool Date::set()
{
if(year<=0)
{
return false;
}
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
if(!(day>0&&day<=31))
return false;
}
else if(month==4||month==6||month==9||month==11)
{
if(!(day>0&&day<=30))
return false;
}
else if(month==2)
{
if(year%100==0&&year%4!=0||year%400==0)
{
if(!(day>0&&day<=29))
return false;
}
else
{
if(!(day>0&&day<=28))
return false;
}
}
else
return false;
return true;
}
class Student{
private:
int id;
char *name;
Date roll;
static int number;
public:
Student();
Student(int n,const char *m,Date p);
static int getNum();
void show();
};
int Student::number=0;
Student::Student()
{
id=2020001;
name=new char[6];
strcpy(name,"ssdut");
number++;
id+=number;
}
Student::Student(int n,const char *m,Date p):roll(p)
{
id=n;
name=new char[strlen(m)+1];
strcpy(name,m);
if(roll.set()!=0)
{
number++;
id+=number;
}
else
cout<<"创建的学生中"<<name<<"信息有误,已删去"<<endl;
}
int Student::getNum()
{
return number;
}
void Student::show()
{
cout<<"学号:"<<id<<endl;
cout<<"姓名:"<<name<<endl;
cout<<"入学日期时间:"<<roll.gety()<<"/"<<roll.getm()<<"/"<<roll.getd()<<endl;
}
int main()
{
Date d1,d2(2020,13,1),d3(2016,45,1),d4(2018,9,1);
Student s1,s2(202001,"sisi",d2),s3(202001,"haha",d3),s4(202001,"xixi",d4);
if(d1.set())
s1.show();
if(d2.set())
s2.show();
if(d3.set())
s3.show();
if(d4.set())
s4.show();
cout<<"已有学生数目:"<<s2.getNum();
}
圆与点位置关系
/定义平面点类Point,包括私有成员float x, y; 及相关成员函数;
定义圆类Circle,私有数据成员包括圆心Point center和半径double radium;
公有成员函数实现以下功能:
1)重载各种构造函数,允许将多个圆按不同形式初始化。
2)定义常成员函数show( )输出信息,例如圆的相关信息
3)定义常成员函数area( )计算圆的面积
4) 设计源判断点与圆的关系judge(), 若p在圆内或圆上返回true,否则返回false。
思考是友元函数还是成员函数?能否利用点距类计算距离的成员函数/
#include<iostream>
using namespace std;
class Point{
private:
float x;
float y;
public:
void setX(float m_x){x=m_x;}
void setY(float m_y){y=m_y;}
float getX(){return x;}
float getY(){return y;}
};
class Circle{
private:
Point center;
double radium;
public:
void setr(double r){radium=r;}
double getr(){return radium;}
double area()const;
void setCenter(Point _Center)
{
center=_Center;
}
Point getCenter()
{
return center;
}
void show()const;
};
const double pi=3.14;
double Circle::area()const
{
return radium*radium*pi;
}
void Circle::show()const
{
cout<<"******圆的信息******"<<endl;
cout<<"半径:"<<radium<<endl;
cout<<"圆的面积:"<<area()<<endl;
}
bool judge(Circle &c,Point &p)
{
double distance;
distance=(c.getCenter().getX()-p.getX())*(c.getCenter().getX()-p.getX()) +
(c.getCenter().getY()-p.getY())*(c.getCenter().getY()-p.getY());
double distanceR;
distanceR=c.getr()*c.getr();
if(distanceR>=distance)
return true;
return false;
}
int main()
{
Circle c;
double r;
cout<<"输入半径"<<endl;
cin>>r;
c.setr(r);
c.show();
Point center;
float cx,cy;
cout<<"输入圆心坐标"<<endl;
cin>>cx>>cy;
center.setX(cx);
center.setY(cy);
c.setCenter(center);
Point p;
float px,py;
cout<<"输入点坐标"<<endl;
cin>>px>>py;
p.setX(px);
p.setY(py);
if(judge(c,p))
cout<<"点在圆上或圆内"<<endl;
else
cout<<"点在圆外"<<endl;
}
请妥善参考。。。