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;
}