MOOC———c++11周————继承

1。公有继承中派生类Student对基类Person成员的访问(20分)

题目内容
已知基类Person的定义如下:
class Person
{ char Name[20];
char Sex;
int
Age;
public:
void Register(char *name, int age, char sex) ;
void
ShowMe();
};
请通过继承的方法建立一个派生类Student,其中
1.新增的数据成员有:
int
Number;
char ClassName[10];
2.新增的成员函数有:
void RegisterStu(char
*classname, int number, char *name, int age, char sex)

//对数据成员赋值,并使用基类的Register
void
ShowStu() //显示数据成员信息,并使用基类的ShowMe
在主程序中建立一个派生类对象,利用已有的成员函数分别显示派生类对象和基类对象的数据成员。

输入格式:
学生的班级、学号、姓名、年龄和性别

输出格式:
先输出派生类对象的数据成员,依次为 学号、班级、姓名、年龄和性别
再输出基类的数据成员,依次为姓名、年龄和性别

输入样例:
计算机51 85071011 张弓长 18 m

输出样例:
85071011 计算机51 张弓长 18 m
张弓长 18 m

#include<iostream>
#include<string.h>
using namespace std;
class Person
{
  char Name[20];
  char Sex;
  int Age;
public:
   void Register(char *name, int age, char sex) ;
   void ShowMe();
};
void Person::Register(char *name, int age, char sex)
{
    strcpy(Name,name);
    Sex=sex;
    Age=age;
}
void Person::ShowMe()
{
    cout<<Name<<" "<<Age<<" "<<Sex<<endl;
}

class Student:public Person {
private :
    int Number;
    char ClassName[10];
public :
    void RegisterStu(char *classname, int number, char *name, int age, char sex) ;
    void ShowStu();
};

void Student::RegisterStu(char *classname, int number, char *name, int age, char sex)
{
    Register(name,age,sex);
    Number=number;
    strcpy(ClassName,classname);
}
void Student::ShowStu()
{
cout<<Number<<" "<<ClassName<<" ";
    ShowMe();

}
int main()
{
    char classname[20];
    int number;
    char name[20];
    int age;
    char sex;
    cin>>classname>>number>>name>>age>>sex;

    Student s;
    s.RegisterStu(classname,number,name,age,sex);
    s.ShowStu();
    s.ShowMe();

    return 0;
}

2.公有继承中派生类Student对基类Person成员的访问(20分)

题目内容
已知基类Person的定义如下:
class Person
{
protected:
char Name[10];
char
Sex;
int Age;
public:
void Register(char *name,int age,char
sex);
void
ShowMe();
};
请通过继承的方法建立两个派生类,其中
派生类Teacher:
1.新增的数据成员有:
char
Dept[20];
int
Salary;
2.新增的成员函数有:
构造函数,并使用基类的Register
3.重写的成员函数有:
void
ShowMe() //显示数据成员信息,并使用基类的ShowMe
派生类Student:
1.新增的数据成员有:
char
ID[12];
char Class[12];
2.新增的成员函数有:
Student(char *name,int age,char
sex, char *id,char *classid);
3.重写的成员函数有:
void
ShowMe() //显示数据成员信息,并使用基类的ShowMe
在主程序中分别建立两个派生类对象,利用已有的成员函数分别显示两个派生类对象的数据成员。

输入格式:
教师对象的初始化参数
学生对象的初始化参数

输出格式:
请参考输出样例严格按照格式输出教师对象和学生对象的详细信息

输入样例:
章立早 38 m 电信学院 2300
李木子 22 f 02035003 能动01

输出样例:
姓名 章立早
性别 男
年龄 38
工作单位 电信学院
月薪 2300
学号 02035003
姓名 李木子
性别 女
年龄 22
班级 能动01
时间限制:500ms内存限制:32000kb

#include<iostream>
#include<string.h>
using namespace std;
class Person
{
public:
  char Name[10];
  char Sex;
  int Age;
public:
  void Register(char *name,int age,char sex);
  void ShowMe();
};

void Person::Register(char *name,int age,char sex)
{
    strcpy(Name,name);
    Age=age;
    Sex=sex;
}
void Person ::ShowMe()
{
    cout<<"姓名 "<<Name<<endl;
    if (Sex=='f')
    cout<<"性别 女"<<endl;
    else
        cout<<"性别 男"<<endl;
    cout<<"年龄 "<<Age<<endl;
}

class Teacher:public Person{
    char Dept[20];
    int Salary;
public:
    Teacher(char *name,int age,char sex,char *dept,int salary){
        strcpy(Dept,dept);
        Salary=salary;
        Person::Register(name,age,sex);
    }
    void ShowMe()
    {

        Person::ShowMe();
        cout<<"工作单位 "<<Dept<<endl;
        cout<<"月薪 "<<Salary<<endl;
    }

} ;

class  Student:public Person{
    char ID[12];
    char Class[12];
public :
    Student(char *name,int age,char sex, char *id,char *classid)
    {
        Person::Register(name,age,sex);
        strcpy(ID,id);
        strcpy(Class,classid);
    }
    void ShowMe()
    {
        cout<<"学号 "<<ID<<endl;
        Person::ShowMe();
        cout<<"班级 "<<Class<<endl;
    }
};

int main()
{


    char name1[20],name2[20];
    int age1,age2;
    char sex1,sex2;
    char xueyuan[20],id[20],Class[20];
    int slary;
    cin>>name1>>age1>>sex1>>xueyuan>>slary;
    cin>>name2>>age2>>sex2>>id>>Class;

    Teacher t(name1,age1,sex1,xueyuan,slary);
    Student s(name2,age2,sex2,id,Class);
    t.ShowMe();
    s.ShowMe();
    return 0;
}

**3.派生类Student的构造函数和析构函数(20分)
题目内容:**
已知基类Person的定义如下:
class Person
{ char Name[10]; //姓名
int Age; //年龄
public:
Person(char* name,int age)
{ strcpy(Name, name);
Age = age;
cout<<”constructor of person “<

#include<iostream>
#include<string.h>

using namespace std;
class Person
{
    char Name[10]; //姓名
    int Age; //年龄
public:
    Person(char* name,int age)
    { strcpy(Name, name);
      Age = age;
      cout<<"constructor of person "<<Name<<endl;
    }
    ~Person()
    {
         cout<<"deconstructor of person "<<Name<<endl;
    }
};
class Student :public Person{
    char ClassName[10]; //班级
    Person Monitor; //班长
public :
    Student(char *name, int age, char *classname, char *name1, int age1)
    :Person(name,age),Monitor(name1,age1)
    {
        strcpy(ClassName,classname);
        cout<<"constructor of Student"<<endl;
    }
    ~Student()
    {

        cout<<"deconstructor of Student"<<endl;
    }

};
int main()
{
    char name1[20],name2[20];
    int age1,age2;
    char classname[20];
    cin>>name1>>age1>>classname>>name2>>age2;

    Student s(name1,age1,classname,name2,age2);
    return 0;
}

4.从Point类继承的Circle类(20分)
题目内容:
已知基类Point的定义如下:

class Point
{
int x, y; //点的x和y坐标
public: Point( int = 0, int = 0 ); // 构造函数
void SetPoint( int, int ); // 设置坐标
int GetX() { return x; } // 取x坐标
int GetY() { return y; } // 取y坐标
void Print(); //输出点的坐标 };
Point( int a, int b ) { SetPoint( a, b ); }
void SetPoint( int a, int b ) { x = a; y = b; }
void Print() { cout << “[” << x << “,” << y << “]”;
}

请通过继承的方法建立一个派生类Circle,其中
1.新增的数据成员有: double radius;
2.新增的成员函数有:
Circle(int x = 0, int y = 0 , double r = 0.0); //对数据成员赋值,并使用SetRadius和基类的Point
void SetRadius( double ); //设置半径
double GetRadius(); //取半径
double Area(); //计算面积
void Print(); //输出圆心坐标和半径,并使用基类的Print
在主程序中分别建立基类对象和派生类对象,使用用户输入的初值分别对基类对象和派生类对象的数据成员赋值后,利用已有的成员函数分别显示基类对象和派生类对象的数据成员信息。
圆周率取3.14。

输入格式:
第一行是Point类的初始化信息,第二行是Circle类的初始化信息

输出格式:
请参考输出样例,严格按照样例输出,建议直接将部分文字复制粘贴进程序代码中

输入样例:
30 50
120 80 10

输出样例:
Point p [30,50]
Circle c Center=[120,80]
Radius=10
The centre of circle c [120,80]
The area of circle c 314
时间限制:500ms内存限制:32000kb

#include<iostream>
using namespace std;
class Point
{
    int x, y; //点的x和y坐标
public:
    Point( int = 0, int = 0 ); // 构造函数
    void SetPoint( int, int ); // 设置坐标
    int GetX() { return x; } // 取x坐标
    int GetY() { return y; } // 取y坐标
    void Print(); //输出点的坐标
};
Point::Point( int a, int b )
{
    SetPoint( a, b );
}
void Point::SetPoint( int a, int b )
{
     x = a;
     y = b;
}
void Point::Print()
{
    cout << "[" << x << "," << y << "]";
}


class Circle:public Point{
    double radius;
public:
    Circle(int x = 0, int y = 0 , double r = 0.0); //对数据成员赋值,并使用SetRadius和基类的Point
    void SetRadius( double ); //设置半径
    double GetRadius(); //取半径
    double Area(); //计算面积
    void Print(); //输出圆心坐标和半径,并使用基类的Print
};
Circle::Circle(int x , int y  , double r )
{
    Point::SetPoint(x,y);
    SetRadius(r);
}
void Circle::SetRadius(double R)
{
    radius=R;
}
double Circle::GetRadius()
{
    return radius;
}
double Circle::Area()
{
    return 3.14*GetRadius()*GetRadius();
}
void Circle::Print()
{
    Point::Print();

}

int main()
{
    int x,y;
    int a,b;
    double c;
    cin>>x>>y;
    cin>>a>>b>>c;
    Point p1(x,y);
    Circle c1(a,b,c);
   cout<<"Point p ";p1.Print();cout<<endl;
   cout<<"Circle c Center="; c1.Print();cout<<endl;
   cout<<"Radius="<<c<<endl;
    cout<<"The centre of circle c "; c1.Print();cout<<endl;
    cout<<"The area of circle c "<<c1.Area()<<endl;

    return 0;
}

5.题目内容:
已知基类Person定义如下:
class Person
{
char Name[10];
char Sex[10];
int Age;
public:
void Register(char *name,int age,char *sex);
void ShowMe();
};
请通过继承的方法建立两个派生类,其中
派生类Teacher:
1.新增的数据成员有:
char Dept[20];
int Salary;
2.新增的成员函数有:
Teacher(char *name,int age,char *sex,char *dept,int salary);
void Show() //显示新增数据成员
派生类Student:
1.新增的数据成员有:
char ID[12];
char Class[12];
2.新增的成员函数有:
Student(char *name,int age,char *sex,char *ID,char *Class);
void Show()//显示新增数据成员
请通过继承的方法从Teacher和Student中建立派生类Graduate,其中
1.新增的成员函数有:
Graduate(char *name,int age,char *sex,char *dept,int salary,char *id,char *classid);
2.重写的成员函数有:
void ShowMe()//显示数据成员,要求调用基类的Show和ShowMe
在主程序中建立一个派生类Graduate的对象,利用成员函数显示对象的数据成员。

输入格式:*
Graduate对象的初始化信息

输出格式:
按照输出样例格式输出Graduate对象的信息

输入样例:
李木子 22 f 电信学院 2300 04035003 硕401

输出样例:
班级 硕401
学号 04035003
姓名 李木子
性别 女
年龄 22
工作单位 电信学院
月薪 2300
时间限制:500ms内存限制:32000kb

#include<iostream>
#include<string.h>
using namespace std;
class Person
{
    char Name[10];
    char Sex[10];
    int Age;
public:
    void Register(char *name,int age,char *sex);
    void ShowMe();
};
void Person::Register(char *name,int age,char *sex)
{
    strcpy(Name,name);
    strcpy(Sex,sex);
    Age=age;
}
void Person::ShowMe()
{
    cout<<"姓名 "<<Name<<endl;
    if (strcmp(Sex,"f")==0)
    cout<<"性别 女"<<endl;
    else
        cout<<"性别 男"<<endl;
    cout<<"年龄 "<<Age<<endl;
}
//——————————————————————————————————————————
class Teacher:public Person{
    char Dept[20];
    int Salary;
public:
    Teacher(char *name,int age,char *sex,char *dept,int salary)
    {
   Person::Register(name,age,sex);
        strcpy(Dept,dept);
        Salary=salary;
    }
    void Show()
    {
        cout<<"工作单位 "<<Dept<<endl;
        cout<<"月薪 "<<Salary<<endl;
    }

};
//————————————————————————————————
class Student :public Person{
    char ID[12];
    char Class[12];
public :
    Student(char *name,int age,char *sex,char *id,char *Class1)
    {
        Person::Register(name,age,sex);
        strcpy(ID,id);
        strcpy(Class,Class1);
    }
    void Show()
    {
        cout<<"班级 "<<Class<<endl;
        cout<<"学号 "<<ID<<endl;
        Person::ShowMe();
    }
};
//______________________________________
class Graduate:public Teacher,public Student{
public :

    Graduate(char *name,int age,char *sex,char *dept,int salary,char *id,char *classid)
    :Teacher(name,age,sex,dept,salary),Student(name,age,sex,id,classid){}
    void ShowMe()
    {
       Student::Show();

    Teacher::Show();

    }
};
int main()
{
    char name[20];
    int age;
    char sex[20];
    char dept[20];
    int salary;
    char id[20];
    char classname[20];
    cin>>name>>age>>sex>>dept>>salary>>id>>classname;
    Graduate g(name,age,sex,dept,salary,id,classname);
    g.ShowMe();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值